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

درس هجدهم : آموزش مدل نگاشت 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

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  
}  
            

کد کلاس Regular_Employee.java

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  
}  
            

کد کلاس Contract_Employee.java

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  
}  
            

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

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

  
  
  
            

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

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

            
نکته:

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

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

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

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");  
}  
}  
            
1395/06/30 2876 1027
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

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