表结构:
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: Address
public class Address {
private String street;
private String city;
private String province;
private String zipcode;
private Customer customer; // 指定Address类属于Customer类
}
Customer.hbm.xml
<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>
1. 采用subclass元素的继承映射父类和子类使用同一张表 (公司有普通员工, 钟点工, 正式员工) -- 一张表
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>