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

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

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

در مدل نگاشت Table Per Subclass، جدول های آدرس دهی شده کلاس های زیرمجموعه از طریق کلیدهای اصلی (Primary key) و یا کلید خارجی (foreign key) به جدول کلاس اصلی Parent برنامه مرتبط هستند.
از المنت برای اتصال و آدرس دهی کلاس فرزند (child class) به کلاس مادر (Parent class) توسط Primary key یا foreign key استفاده می شود.
در مثال این درس، قصد داریم تا از خاصیت hb2dll.auto برای تولید خودکار جداول استفاده کنیم. بنابراین نیازی نیست نگران ایجاد جدول ها در پایگاه داده باشیم.
ابتدا بیایید نگاهی به سلسله مراتب کلاس هایی که می خواهیم با هم نگاشت یا آدرس دهی کنیم، بپردازیم :

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

در کد فایل زیر، نحوه آدرس دهی (map) سلسله مراتب Hierarchy را با استفاده از المنت joined-subclass نشان داده ایم :

    
   
  
  
    
    
    
    
    
  
    
  
    
    
    
    
    
   
    
    
    
    
    
  
    
  
            

در مدل نگاشت Table Per Subclass، سه جدول در پایگاه داده وجود دارد که هر یک از آن ها نماینده یکی از کلاس های برنامه می باشد. همچنین زیر المنت joined-Subclass، کلاس زیرمجموعه یا Subclass را در کد مشخص می کند. ساختار هر یک از جدول های سلسله مراتب برنامه به صورت زیر است :

Table structure for Employee class

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

Table structure for Regular_Employee class

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

Table structure for Contract_Employee class

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

مثال عملی نگاشت با مدل Table Per SubClass Class :

در مثال عملی این درس، ابتدا سه کلاس اصلی مثال را طراحی کرده و سپس آدرس دهی (mapping) آن ها را در فایل employee.hbm.xml تعیین می کنیم. برای این منظور مراحل زیر را انجام دهید :

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

در مرحله اول، بایستی کلاس های اصلی و خام برنامه (Persistant Class) ها را که سلسله مراتب وراثت (hierarchy) را مشخص می کنند، تولید شود. فایل های زیر که هر کلاس را مشخص می کند :

File: Employee.java

 
package com.javatpoint.mypackage;  
  
public class Employee {  
private int id;  
private String name;  
  
//getters and setters  
} 
            

File: Regular_Employee.java

 
package com.javatpoint.mypackage;  
public class Regular_Employee extends Employee{  
private float salary;  
private int bonus;  
  
//getters and setters  
}  
            

File: Contract_Employee.java

 
package com.javatpoint.mypackage;  
  
public class Contract_Employee extends Employee{  
    private float pay_per_hour;  
    private String contract_duration;  
  
//getters and setters  
}  
            

2)ایجاد فایل نقشه دهی (mapping) برای کلاس Persistent :

کد فایل employee.hbm.xml که سلسله مراتب وراثت را در برنامه مشخص می کند، به شرح زیر است :

    
   
  
  
    
    
    
    
    
  
    
  
    
    
    
    
    
   
    
    
    
    
    
  
    
   
            

3)ایجاد فایل تنظیمات برنامه Configuration file :

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

              

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

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

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

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

در کلاس StoreData.java که کد آن را در بخش زیر مشاهده می کنید، ساز و کار لازم جهت نگهداری شی Persistent Object لحاظ شده است :

  package com.javatpoint.mypackage;  
  
import org.hibernate.*;  
import org.hibernate.cfg.*;  
  
public class StoreData {  
public static void main(String[] args) {  
    Session session=new Configuration().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 2505 1108
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

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