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

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

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

به وسیله این استراتژی، می توانید کل سلسله مراتب (Hierachy) برنامه را در یک جدول تنها، نگاشت یا آدرس دهی (map) کنید. در این مدل، یک ستون اضافه در جدول وجود دارد که به آن ستون تفکیک کننده یا discriminator column می گویند و برای تشخیص و تمایز کلاس ها از یکدیگر به کار می رود.

بیایید ابتدا نگاهی به صورت مسئله بیاندازیم. می خواهیم کل سلسه مراتب یا Hierachy که در دیاگرام زیر نمایش داده شده است را در یک جدول پایگاه داده نگاشت (map) کنیم.

سه کلاس در سلسله مراتب فوق وجود دارد. کلاس Employee کلاس مادر یا کلاس super class دو کلاس دیگر یعنی کلاس Coutract_Employee و کلاس Regular_Employee. فایل آدرس دهی (mapping) به کار رفته جهت این سلسله مراتب دارای کد زیر است :

   
  
  
  
  
  
  
  
  
  
  
            
  
  
  
  
            
  
  
  
  
            
  
            
  
            

در مدل Table Per Hierachy یک ستون اضافه به عنوان ستون تفکیک کننده یا discriminator Column به چهارچوب کاری Hiberante اضافه می شود که نوع یا مشخصات رکورد جاری را ثبت می کند. این ستون، در اصل برای متمایز کردن و امکان تشخیص رکوردها از هم به کار می رود. برای این منظور بایستی زیرالمنت discriminator در کد کلاس تعیین شود.
از طرف دیگر، زیرالمنت Subclass، کلاس زیرمجموعه یا وابسته Subclass را مشخص می کند. در این مثال، کلاس های Regular_Employee و Contract_Employee کلاس های وابسته یا Subclass کلاس اصلی یعنی Employee هستند.
ساختار جدول مورد استفاده جهت سلسله مراتب Hierarchy به صورت زیر است :

مثال عملی کار با مدل نگاشت Table Per Hierarchy

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

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

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

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)ایجاد فایل آدرس دهی لازم جهت کلاس Persistent Class :

کد فایل employee.bhm.xml که آدرس دهی (mapping) سلسله مراتب فوق را توضیح می دهد، به صورت زیر است :

   
  
  
  
  
  
  
  
  
  
  
            
  
  
  
  
            
  
  
  
  
            
  
            
  
            

3)اضافه کردن آدرس فایل hbm در فایل تنظیمات Configuration :

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

                  
            

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

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

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

در کلاس زیر که کد آن نمایش داده شده است، یک کلاس به نام ta و StoreD ایجاد می کنیم تا شی Persistent Object را در سطح برنامه نگهداری کند :

File: StoreData.java

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

5)خروجی :

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

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

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

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