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

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

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

همان طور که در درس قبل اشاره کردیم، در مدل نگاشت Table Per Concrete Class به ازای هر کلاس، یک جدول در پایگاه داده ایجاد می شود. بنابراین مقادیر خالی (Nnallblc) در جدول ها نخواهیم داشت. تنها عیب استفاده از این روش، ایجاد ستون های تکراری در جدول های کلاس های زیرمجموعه است.
در این مدل ما بایستی از Annotation های @Inheritance در کلاس اصلی و از @AltributeOVerrides در کلاس های زیرمجموعه استفاده کنیم.
@Inheritance مشخص می کند که ما داریم از مدل نگاشت Table Per Concrete Class در برنامه خود استفاده می کنیم. این Annotation فقط بایستی در کلاس Pareut تعیین شود.
از طرف دیگر، @AltributeOVerrides تعیین می کند که خواص کلاس Pareut در کلاس های زیرمجموعه، بازنویسی خواهند شد. در ساختار جدول ها، ستون های جدول کلاس Pareut در جدول کلاس زیرمجموعه، اضافه خواهند شد.

دیاگرام زیر نشان داده سلسله مراتب وراثت در کلاس های برنامه است :

آموزش مدل نگاشت 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 Concrete Class :

در این مثال عملی، 3 کلاس اصلی مثال را ایجاد کرده و سپس در فایل employee.bhm.xml، آدرس دهی و نگاشت (mapping) مورد نظر را انجام خواهیم داد.

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)ایجاد فایل آدرس دهی (mapping) برای کلاس Persistent Class : نحوه آدرس دهی و نگاشت که در بخش قبل تشریح کردیم را به صورت زیر در فایل employee.bhm.xml تعیین می کنیم :

فایل : employee.hbm.xml

  
  
  
  
    
    
    
    
    
           
    
            
    
    
    
    
            
    
    
    
    
            
    
            
    
            

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

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

 
                  
            

اکنون کد فایل تنظیمات برنامه به صورت زیر خواهد شد - hibernate.cfg.xml :

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

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

4)ایجاد کلاس لازم جهت نگهداری مشی employee در پایگاه داده :
در کلاس زیر به نام storeData.java، اقدام به نگهداری اشیای employee در پایگاه داده (database) می کنیم :

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

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