hibernate单表之组件映射和继承映射

表结构:

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: Customer
public 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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值