hibernate單表之元件對映和繼承對映
阿新 • • 發佈:2019-01-23
表結構:
Create table customer(
id int primary key,
name varchar(15),
home_street varchar(255),
home_city varchar(255),
home_province varchar(255),
home_zipcode varchar(255),
com_street varchar(255),
com_city varchar(255),
com_province varchar(255),
com_zipcode varchar(255),
)
JavaBean: Customerpublic class Customer {
private Integer id;
private String name;
private Address homeAddress;
private Address comAddress;
}
JavaBean: AddressCustomer.hbm.xmlpublic class Address { private String street; private String city; private String province; private String zipcode; private Customer customer; // 指定Address類屬於Customer類 }
1. 採用subclass元素的繼承對映<hibernate-mapping> <class name="cn.itcast.component.Customer" table="customers"> <id name="id" type="integer"> <column name="id"></column> <generator class="increment"></generator> </id> <property name="name" type="string" access="property"> <column name="name"></column> </property> <!-- 配置元件對映 component標籤: 表示Address類是Customer類的組成祖墳,在hibernate中稱之為元件 --> <component name="homeAddress" class="cn.itcast.component.Address"> <parent name="customer"/> <property name="city" column="home_city"></property> <property name="street" column="home_street"></property> <property name="zipcode" column="home_zipcode"></property> <property name="province" column="home_province"></property> </component> <component name="comAddress" class="cn.itcast.component.Address"> <parent name="customer"/> <property name="city" column="com_city"></property> <property name="street" column="com_street"></property> <property name="zipcode" column="com_zipcode"></property> <property name="province" column="com_province"></property> </component> </class> </hibernate-mapping>
父類和子類使用同一張表 (公司有普通員工, 鐘點工, 正式員工) -- 一張表
Javabean:
public class Employee{
private Integer id;
private String name;
}
public class HourEmployee extends Employee{
private double rate;
}
public class SalaryEmployee extends Employee{
private Double salary;
}
欄位意思:id:員工編號
etype:員工型別 (he 小時工,se 正式員工,ee剛入職的員工)
name:員工姓名
rate:小時工的工資
salary:正式員工的工資
Employee.hbm.xml
<hibernate-mapping>
<class name="cn.itcast.Employee" table="employee" discriminator-value=”ee”>
<id name="id" type="integer">
<column name="id"></column>
<generator class="increment"></generator>
</id>
<!--辨別者列,column=”etype”用於區分員工的種類,該配置必須放置在id的後面-->
<discriminator column=”etype” type=”string”/>
<property name="name" type="string" access="property">
<column name="name"></column>
</property>
<!--
配置子類
discriminator-value: 子類對應的辨別者列的值
-->
<subclass name="cn.itcast.HourEmployee" discriminator-value="he">
<property name="rate" column="rate" type=”double”></property>
</subclass>
<subclass name="cn.itcast.SalaryEmployee" discriminator-value="se">
<property name="salary" column="salary" type=”double”></property>
</subclass>
</class>
</hibernate-mapping>
2. 採用joined-subclass元素的繼承對映三張表 javabean同上,表和表之間存在主表和次表的概念
Employee.hbm.xml
<hibernate-mapping>
<class name="cn.itcast.Employee" table="e_emp">
<id name="id" type="integer">
<column name="id"></column>
<generator class="increment"></generator>
</id>
<property name="name" type="string" access="property">
<column name="name"></column>
</property>
<!--
joined-subclass: 用於對映HourEmployee類
table: 子類對應的表的名稱
key子元素: 指定h_emp表中既作為主鍵又作為外來鍵eid列
property: table屬性指定表中的列
-->
<joined-subclass name="cn.itcast.HourEmployee" table="h_emp">
<key column=”eid”/>
<property name="rate" column="rate" type=”double”/>
</joined-subclass >
<joined-subclass name="cn.itcast.SalaryEmployee" table="s_emp">
<key column=”sid”/>
<property name="salary" column="salary" type=”double”/>
</joined-subclass >
</class>
</hibernate-mapping>