Hibernate 关联映射
2011-12-08 22:56
387 查看
Hibernate 关联映射
多对一
一对多
一对一
多对一(Employee - Department)
映射文件<many-to-one name=”depart” column=”depart_id”/>
比较两图可以看到,单向多对一关联中对象模型的类之间的引用在关系模型中表示为表之间的外检引用。单向多对一,关联在对象模型和关系模型中的表现形式能够很好地匹配上。
针对以上对象模型创建出以下两个持久化类。
1)Department类
/**部门实体类*/
public class Department{
private long id;//对象标示符(OID)
private String name;//姓名
public Department(){}//无参数的构造方法
//以下为所有属性的getter和setter方法…..
}
2)Employee类
/**员工实体类*/
public class Emoloyee{
private long id;//对象标示符
private String username;//姓名
private Department dept;//所属部门
public Emoloyee(){}//无参数构造方法
//以下省略所有属性的getter和setter方法….
}
在这个持久化类中定义一个Department类型的dept属性,用于表示这个员工所属的部门。它们对应的映射文件如下:
Department.hbm.xml
<?xml version=1.0 encoding=”utf-8”>
<!DOCTYPE hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd>
<hibernate-mapping>
<!—映射持久化类--!>
<class name=”com.qiujy.domain.Department” table=”department”>
<!—映射对象标示符--!>
<id name=”id” column=”id” type=”long”><generation class=”nativ” /></id>
<!—映射普通属性--!>
<property name=”name”/>
<property name=”department”/>
</class>
</hibernate-mapping>
Employee.hbm.xml
<?xml version=”1.0” encoding=”UTF-8”>
<DOCTYPE Hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>
<hibernate-mapping>
<!—映射持久化类--!>
<class name=”com.qiujy.domain.Employee” table=”employee”>
<!—映射对象标示符--!>
<id name=”id” column=”id” type=”long”><generator class=”native”/></id>
<!—映射普通属性--!>
<property name=”username” not-null=”true”/>
<!—用many-to-one元素映射多对一关联
name属性:指定关联的属性名
column属性:指定此关联属性在数据库表中的外键字段名
-->
<many-to-one name=”dept” colum=”dept_id”/>
</class>
</hibernate-mapping>
在这个映射文件中,使用many-to-one元素来映射多对一关联关系。
一对多(Department-Employee)
<set name=”employees”>
<key column=”depart_id”/>
<one-to-many class=”Employee”/>
</set>
1)Order类
/**订单实体类*/
public class Order{
private long id;//对象标示符(OID)
private String orderNo;//订单编号
private Date loginTime;//下单时间
public Ordert(){}//无参数的构造方法
//以下为所有属性的getter和setter方法…..
}
2)Acount类
/**账号实体类*/
public class Emoloyee{
private long id;//对象标示符
private String loginName;//姓名
private Set<Order> orderSer;//所有订单的集合
public Acount(){}//无参数构造方法
//以下省略所有属性的getter和setter方法….
}
在这个持久化类中定义一个Department类型的dept属性,用于表示这个员工所属的部门。它们对应的映射文件如下:
Order.hbm.xml
<?xml version=1.0 encoding=”utf-8”>
<!DOCTYPE hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd>
<hibernate-mapping>
<!—映射持久化类--!>
<class name=”com.qiujy.domain.Order” table=”order”>
<!—映射对象标示符--!>
<id name=”id” column=”id” type=”long”><generation class=”nativ” /></id>
<!—映射普通属性--!>
<property name=”nameNo” column=”order_no”/>
<property name=”createTime” column=”create_time” type=”timetamp”/>
</class>
</hibernate-mapping>
Acoumt.hbm.xml
<?xml version=”1.0” encoding=”UTF-8”>
<DOCTYPE Hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>
<hibernate-mapping>
<!—映射持久化类--!>
<class name=”com.qiujy.domain.Acount” table=”acount”>
<!—映射对象标示符--!>
<id name=”id” column=”id” type=”long”><generator class=”native”/></id>
<!—映射普通属性--!>
<property name=”loginName” colum=”login_name”/>
<!—映射集合属性,关联到多端的实体类à
<set name=”orderSet” cascade=”save-update”>
<!--用key元素指定关联到外键列-->
<key 用one-to-many元素关联到多端的实体类>
<one-to-many class=”com.qiujy.domain.Order”/>
</set>
</class>
</hibernate-mapping>
一对一(Person - IdCard)
1)基于主键的one-to-one(person的映射文件)
<id name=”id”>
<generator class=”foreign”><param name=”property”>idCard</param></generator>
<id>
<one-to-one name=”idCard” constrained=”true”/>
一对一(Person - IdCard)
2)基于外健的one-to-one,可以描述为多对一,加unique=“true”约束
<one-to-one name=”idCard” property-ref=“person”/>
property-ref用于指定关联类的一个属性,这个属性将会和本外键相对应
<many-to-one name=”person” column=”person_id” unique=”true” not-null=”true”/>
<!-唯一的多对一,其实就便成了一对一了-->
Person类
/**公民实体类*/
public class Person{
private int id ;//对象标示符
private String name;//姓名
private int age;//年龄
public Person(){}//无参构造方法
//以下为所有属性的gerrer和setter方法……..
}
/**身份证实体类*/
public class IdCard{
private int id ;//对象标示符
private intt useful-life;//有效期
private int person_id;//公民的标示符
public Person(){}//无参构造方法
//以下为所有属性的gerrer和setter方法……..
}
在这个持久化类中定义一个Department类型的dept属性,用于表示这个员工所属的部门。它们对应的映射文件如下:
IdCard.hbm.xml
<?xml version=1.0 encoding=”utf-8”>
<!DOCTYPE hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd>
<hibernate-mapping>
<!—映射持久化类--!>
<class name=”com.qiujy.domain.IDCard” table=”idcard”>
<!—映射对象标示符--!>
<id name=”id” column=”id” type=”long”><generation class=”nativ” /></id>
<!—映射普通属性--!>
<property name=”no” not-null=”ture”/>
</class>
</hibernate-mapping>
这个映射文件没有任何特别之处,因为它并不知道Person的存在。
Peson.hbm.xml
<?xml version=”1.0” encoding=”UTF-8”>
<DOCTYPE Hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>
<hibernate-mapping>
<!—映射持久化类--!>
<class name=”com.qiujy.domain.Person” table=”person”>
<!—映射对象标示符--!>
<id name=”id” column=”id” type=”long”><generator class=”native”/></id>
<!—映射普通属性--!>
<property name=”name” />
<!—用many-to-one元素映射多对一关联
name属性:指定关联的属性名
column属性:指定此关联属性在数据库表中的外键字段名
unique属性:指定值为”true”来限制多段的多重性为一
cascade属性:用来指定两个对象之间的操作联动关系
-->
<many-to-one name=”dept” name=”idCard” colum=”idcard_id”
unique=”ture”
cascade=”all”/>
</class>
</hibernate-mapping>
在Person端用many-to-one来映射它的idCard属性,同时添加unique=true来表示这个是唯一的多对一,也就是一对一关联。
在这个映射中,使用一个很重要的属性cascade。这个属性用在many-to-one、one-to-one、many-to-many这些元素上,用来指定两个对象之间的操作联动关系。即当主控方(增、删和改)时,关联对象(被动方)是否同一步执行同一 操作。
这个属性有以下几种取值:
none:所有情况下均不进行级联操作。这是默认值。
all:所有情况下均进行级联操作。
save-update:在执行保存和更新时进行级联操作。
delet:在进行删除时进行级联操作。
例如:在本例中,cascade的值为all表示对Peson对象进行操作时,也会关联到对应的IDCard对象的操作。
相关文章推荐
- Hibernate映射详解(三)--一对一主键关联映射
- Hibernate映射详解(四)--一对一唯一外键关联映射
- Hibernate的关联映射
- Hibernate之关联映射(下)
- 【Hibernate步步为营】--(一对多映射)之单向关联
- hibernate注解版关联映射Many-to-One/Many-to-Many等&异常处理
- Hibernate关系映射(二)一对一双向外键关联@OneToOne Annotation方式
- Hibernate之对象关系映射04一对一双向关联
- Hibernate关系映射(五)一对多、多对一双向关联@OneToMany @OneToMany Annotation方式
- Hibernate 、继承关联映射
- Hibernate的七种映射关系之七种关联映射(一)
- hibernate详解(五)---一对一关联映射
- 【HIbernate框架学习】:Hibernate对象关系映射之一对一关联映射(一)
- Hibernate 关系映射(一)基于外键关联的N:1
- hibernate多对一关联只映射出一张表
- Hibernate对象关系映射----关联映射(二)
- 【Hibernate】从入门到精通(七)关联映射之多对多映射
- Hibernate(六)——多对多关联映射
- Hibernate关联关系映射(多对一关联映射)
- Hibernate关联映射 --- 多对多实例分析(单向关联)