آموزش مدل نگاشت Table Per Concrete Class با استفاده از فایل xml
Cدر مدل نگاشت Table Per Concrete Class ، به ازای هر کلاس برنامه یک جدول در پایگاه داده ایجاد می شود که این جدول ها، هیچ نوع ارتباطی با هم ندارند. دو راه برای اتصال و ایجاد ارتباط بین جدول (Table) و مدل نگاشت Table Per Concrete Class وجود دارد که عبارتند از :
- استفاده از المنت Unio-Subclass.
- به وسیله ایجاد خود به خودی جدول برای هر کلاس.
ابتدا، بیایید نگاهی به کلاس های مثال درس و سلسله مراتب وراثت در آن ها بیاندازیم. دیاگرام زیر نشان دهنده کلاس ها و خواص آن هاست :

در کد فایل زیر، به وسیله المنت Union-subclass عمل نگاشت و آدرس دهی سلسله مراتب (hierarchy) را نشان داده ایم. ابتدا به مطالعه کد بپردازید، سپس به تشریح بخش های آن خواهیم پرداخت :
در مدل نگاشت Table Per Concrete Class، 3 جدول در پایگاه داده وجود خواهد داشت که هر کدام نماینده یکی از کلاس های برنامه است. زیرالمنت Union-Subclass، کلاس متعلق به جدول را تعیین می کند. این المنت، ستون های جدول Parent را به جدول اضافه کرده و همانند یک اتصال (Union) عمل می کند.
ساختار کلی هر یک از جدول های مثال به صورت زیر خواهد بود :
Table structure for Employee class

Table structure for Regular_Employee class

Table structure for Contract_Employee class
مثال عملی مدل نگاشت 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.bhm.xml
3)اضافه کردن آدرس دهی لازم جهت فایل hbm در فایل تنظیمات Configuration file :
فایل hibernate.xml را باز کرده و آدرس زیر را جهت mapping فایل hbm بر کد اضافه کنید :
اکنون کد فایل تنظیمات برنامه به صورت زیر خواهد شد :
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");
}
}
