یه تابستون متفاوت با یه تصمیم هوشمندانه! دوره هوش مصنوعی با تخفیف ویژه، فقط با کد AI84 دوره هوش مصنوعی با تخفیف ویژه، فقط با کد AI84
🎯 ثبت نام

درس هجدهم : آموزش مدل نگاشت Table Per Subclass با استفاده از Annotation

آموزش مدل نگاشت Table Per Subclass با استفاده از Annotation

همان طور که در درس های قبل، اشاره کردیم در استراتژی نگاشت Table Per Subclass، جدول های پایگاه داده به ازای هر کلاس اصلی (Persistent Class) ایجاد شده و از طریق کلیدهای اصلی (Primary key) و کلیدهای خارجی (Foreign key) به هم متصل هستند. بنابراین در این نوع رابطه، ستون های تکراری نخواهیم داشت.
در این مدل نیاز داریم تا annotation های @Inheritance را در کلاس مادر (Parent) و @PrimaryKeyJoinColumn را در کلاس های زیرمجموعه (Subclass) تعریف کنیم.
ابتدا بیایید به سلسله مراتب کلاس هایی که می خواهیم آن ها را آدرس دهی یا map کنیم، نگاهی بیاندازیم :

آموزش مدل نگاشت Table Per Subclass با استفاده از فایل annotation

ساختار هر یک از جدول به شرح زیر خواهد بود.

Table structure for Employee class

آموزش مدل نگاشت Table Per Concrete Class با استفاده از Annotation

Table structure for Regular_Employee class

آموزش مدل نگاشت Table Per Concrete Class با استفاده از Annotation

Table structure for Contract_Employee class

آموزش مدل نگاشت Table Per Concrete Class با استفاده از Annotation

مثال عملی مدل نگاشت Table Per Subclass با استفاده از Annotation

در این مثال عملی، سه جدول اصلی برنامه را ایجاد کرده و سپس آدرس دهی (mapping) لازم برای آن ها را در فایل employee.xml انجام خواهیم داد.

1)ایجاد کلاس های اصلی Persistent Class :

در مرحله اول، بایستی کلاس های اصلی برنامه که وراثت را تولید می کنند، ایجاد کنیم.

کد کلاس Employee.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.javatpoint.mypackage; 
import javax.persistence.*; 
   
@Entity 
@Table(name = "employee103"
@Inheritance(strategy=InheritanceType.JOINED) 
   
public class Employee { 
@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
       
@Column(name = "id"
private int id; 
   
@Column(name = "name"
private String name; 
   
//setters and getters 
            <button></button>

کد کلاس Regular_Employee.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.javatpoint.mypackage; 
 
import javax.persistence.*; 
   
@Entity 
@Table(name="regularemployee103"
@PrimaryKeyJoinColumn(name="ID"
public class Regular_Employee extends Employee{ 
       
@Column(name="salary")   
private float salary; 
   
@Column(name="bonus")    
private int bonus; 
   
//setters and getters 
            <button></button>

کد کلاس Contract_Employee.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.javatpoint.mypackage; 
   
import javax.persistence.*; 
   
@Entity 
@Table(name="contractemployee103"
@PrimaryKeyJoinColumn(name="ID"
public class Contract_Employee extends Employee{ 
       
    @Column(name="pay_per_hour"
    private float pay_per_hour; 
       
    @Column(name="contract_duration"
    private String contract_duration; 
   
    //setters and getters 
            <button></button>

2)ایجاد فایل تنظیمات و پیکربندی اطلاعات برنامه Congiguratio File :

فایل hibernate.cgf.xml را باز کرده و المنت های زیر را جهت آدرس دهی هر یک از کلاس های برنامه به کد آن اضافه کنید :

1
2
3
4
<mapping class="com.javatpoint.mypackage.Employee"></mapping
<mapping class="com.javatpoint.mypackage.Contract_Employee"></mapping
<mapping class="com.javatpoint.mypackage.Regular_Employee"></mapping
            <button></button>

پس از این تغییر، کد فایل بایستی به صورت زیر شود :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!--?xml version='1.0' encoding='UTF-8'?--> 
   
   
<!-- Generated by MyEclipse Hibernate Tools.                   --> 
<hibernate-configuration> 
   
    <session-factory> 
        <property name="hbm2ddl.auto">update</property> 
        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> 
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property> 
        <property name="connection.username">system</property> 
        <property name="connection.password">oracle</property> 
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
           
        <mapping class="com.javatpoint.mypackage.Employee"></mapping> 
        <mapping class="com.javatpoint.mypackage.Contract_Employee"></mapping> 
        <mapping class="com.javatpoint.mypackage.Regular_Employee"></mapping> 
    </session-factory> 
   
</hibernate-configuration>
            <button></button>
نکته:

خاصیت hbm2ddl.auto جهت تولید اتوماتیک جدول ها در پایگاه داده، به فایل تنظیمات برنامه اضافه شده است.

3)ایجاد کلاس لازم جهت نگهداری شی Persistant object :

در کلاس StoreData.java که کد آن را مشاهده می کنیم، ساز و کار لازم جهت نگهداری شی Persistant object تعریف شده است.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.javatpoint.mypackage; 
import org.hibernate.*; 
import org.hibernate.cfg.*; 
   
public class StoreData { 
public static void main(String[] args) { 
    AnnotationConfiguration cfg=new AnnotationConfiguration(); 
    Session session=cfg.configure("hibernate.cfg.xml").buildSessionFactory().openSession(); 
       
    Transaction t=session.beginTransaction(); 
       
    Employee e1=new Employee(); 
    e1.setName("sonoo"); 
       
    Regular_Employee e2=new Regular_Employee(); 
    e2.setName("Vivek Kumar"); 
    e2.setSalary(50000); 
    e2.setBonus(5); 
       
    Contract_Employee e3=new Contract_Employee(); 
    e3.setName("Arjun Kumar"); 
    e3.setPay_per_hour(1000); 
    e3.setContract_duration("15 hours"); 
       
    session.persist(e1); 
    session.persist(e2); 
    session.persist(e3); 
       
    t.commit(); 
    session.close(); 
    System.out.println("success"); 
            <button></button>
1395/06/30 2554 955
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...