کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

درس چهاردهم : آموزش مدل نگاشت Table Per Hierarchy به وسیله Annotation

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

در درس قبلی، ما به وسیله یک جدول تنها در یک فایل xml، سلسله مراتب وراثت (inheritance hierarchy) را آدرس دهی و نگاشت (mapping) کردیم. در این درس، قصد داریم همین کار را مجددا به وسیله annotation انجام دهیم.
برای این منظور بایستی از موارد زیر در کد annotation خود استفاده کنید :

  • Inheritance@
  • DiscriminatorColumn@
  • DiscriminatorValue@

برای انجام عمل نگاشت Table Per hierarchy، فقط به یک جدول در پایگاه داده نیاز داریم.
همچنین این جدول دارای یک ستون اضافه به نام ستون تفکیک کننده (discriminator Column) می باشد که جهت تشخیص و متمایز کردن کلاس ها از هم به کار می رود.
نقشه سلسله مراتب وراثت در مدل مورد نظر ما به صورت زیر است :

آموزش مدل نگاشت Table Per Hierarchy به وسیله Annotation
3 کلاس در سلسله مراتب (hierarchy) فوق وجود دارد. کلاس Employee که کلاس مادر و اصلی جهت کلاس های Regular_Employee و Contract_Employee است.
جدول ساختار وراثت کلاس های فوق به صورت زیر است :

آموزش مدل نگاشت Table Per Hierachy به وسیله annonation

مثال عملی نگاشت Table Per Hierarchy به وسیله Annotation :

برای نگاشت مدل Table Per Hierarchy بایستی مراحل زیر را انجام دهید :

  • ایجاد کلاس Persistent Class.
  • ایجاد فایل تنظیمات و پیکربندی برنامه Configuration file.
  • ایجاد کلاس لازم جهت نگهداری و تبادل داده ها.

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

شما بایستی در ابتدا کلاس های اصلی و خام برنامه (Persistent Class) که سلسله مراتب وراثت را مشخص می کند، را ایجاد کنید. برای این منظور 3 کلاس زیر را تعریف می کنیم :

File: Employee.java

 
package com.javatpoint.mypackage;  
import javax.persistence.*;  
  
@Entity  
@Table(name = "employee101")  
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)  
@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)  
@DiscriminatorValue(value="employee")  
  
public class Employee {  
@Id  
@GeneratedValue(strategy=GenerationType.AUTO)  
      
@Column(name = "id")  
private int id;  
  
@Column(name = "name")  
private String name;  
  
//setters and getters  
}  
            

File: Regular_Employee.java

 
package com.javatpoint.mypackage;  
import javax.persistence.*;  
  
@Entity  
@Table(name = "employee101")  
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)  
@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)  
@DiscriminatorValue(value="employee")  
  
public class Employee {  
@Id  
@GeneratedValue(strategy=GenerationType.AUTO)  
      
@Column(name = "id")  
private int id;  
  
@Column(name = "name")  
private String name;  
  
//setters and getters  
}  
            

File: Contract_Employee.java

 
package com.javatpoint.mypackage;  
import javax.persistence.*;  
  
@Entity  
@Table(name = "employee101")  
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)  
@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)  
@DiscriminatorValue(value="employee")  
  
public class Employee {  
@Id  
@GeneratedValue(strategy=GenerationType.AUTO)  
      
@Column(name = "id")  
private int id;  
  
@Column(name = "name")  
private String name;  
  
//setters and getters  
}  
            

2)اضافه کردن Persistent Class در فایل تنظیمات برنامه :

فایل hibernate.cgf.xml را باز کرده و المنت های (mapping) زیر را بر هر یک از کلاس برنامه اضافه کنید. کد فایل تنظیمات به صورت زیر بایستی تبدیل شود :

   
   
   

: اکنون فایل تنظیمات به صورت زیر خواهد شد

File: hibernate.cfg.xml

 
  
   
   
  
  
   
      
        update  
        org.hibernate.dialect.Oracle9Dialect  
        jdbc:oracle:thin:@localhost:1521:xe  
        system  
        oracle  
        oracle.jdbc.driver.OracleDriver  
    
          
          
          
      
   
  
نکته:

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

3)ایجاد کلاس لازم جهت نگهداری شی Persistent Class Object :

به وسیله کلاس StoreTest.java که کد آن در قسمت زیر مشخص شده است، می توانید شی employee را در پایگاه داده نگهداری کنید :

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");  
}  
}  
            

4)خروجی برنامه به صورت زیر خواهد بود :

آموزش مدل نگاشت Table Per Hierachy به وسیله annonation

1395/06/30 3329 1044
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

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