Hibernate学习随笔-----关系映射(1)单向N-1关联
2015-09-14 19:24
627 查看
单向N-1关联:只需要从N的一端可以访问1的一端
单向N-1的关系,如多个人对应同一个住址,只需从人的实体端可以找到对应的地址实体,无需关心某个地址的全部住户。
程序应该在N的一端的持久化类中增加一个属性,该属性引用的是1的一端的关联实体。
public class Person{
private Address address; //每个Person都单向的持有一个Address
public void setAddress(Address address){ this.address=address;}
public Address getAddress(){return this.address;}
}
pulic class Address{} //程序无需从Address访问Person,所以Address无需增加Person属性
1.无连接表的N-1关联
Person端增加了Address属性,该属性不是一个普通的组件属性,而是引用另一个持久化类的类,Hibernate使用<many-to-one>元素映射N-1的关联实体,直接采用<many-to-one>元素来映射关联实体将会在N的一端的数据表中增加一个外键列,用于参照主表记录。
注:直接使用<mang-to-one>元素来映射N-1关联时,Hibernate将无需使用连接表,直接使用外键关联策略来处理这种关联映射。
Person.hbm.xml
<class name="Person" table="person_inf">
<!--用映射N-1关联实体,指定关联实体类为Address,指定外键列名为address_id,并指定级联全部操作-->
<many-to-one name="address" cascade="all" class="Address" column="address_id"/>
</class>
注:在所有基于外键约束的关联关系中,都必须牢记:要么总是先持久化主表记录对应的实体,要么设置级联操作;否则当Hibernate试图插入从表记录时,如果发现该从表记录参照的主表记录不存在,那一定会抛出异常。
2.有连接表的N-1关联:使用于在底层数据库建模时使用连接表来建立外键关系映射的关联关系
如果需要使用连接表来映射单向N-1关联,则需要显示使用<join/>元素,该元素用于强制将一个类的属性映射到多张表中。使用<join/>元素时通常需要指定一个table属性,用于指定连接表的表名。
使用<join/>元素映射连接表时还需要外键关联,应在配置文件中增加<key/>子元素来映射外键,并为join元素增加<many-to-one>子元素,用于映射N-1的关联实体。
<class name="Person" table="person_inf">
<join table="person_address">
<key column="person_id/">
<many-to-one name="address" cascade="all" class="Address" column="address_id"/>
</join>
</class>
单向N-1的关系,如多个人对应同一个住址,只需从人的实体端可以找到对应的地址实体,无需关心某个地址的全部住户。
程序应该在N的一端的持久化类中增加一个属性,该属性引用的是1的一端的关联实体。
public class Person{
private Address address; //每个Person都单向的持有一个Address
public void setAddress(Address address){ this.address=address;}
public Address getAddress(){return this.address;}
}
pulic class Address{} //程序无需从Address访问Person,所以Address无需增加Person属性
1.无连接表的N-1关联
Person端增加了Address属性,该属性不是一个普通的组件属性,而是引用另一个持久化类的类,Hibernate使用<many-to-one>元素映射N-1的关联实体,直接采用<many-to-one>元素来映射关联实体将会在N的一端的数据表中增加一个外键列,用于参照主表记录。
注:直接使用<mang-to-one>元素来映射N-1关联时,Hibernate将无需使用连接表,直接使用外键关联策略来处理这种关联映射。
Person.hbm.xml
<class name="Person" table="person_inf">
<!--用映射N-1关联实体,指定关联实体类为Address,指定外键列名为address_id,并指定级联全部操作-->
<many-to-one name="address" cascade="all" class="Address" column="address_id"/>
</class>
注:在所有基于外键约束的关联关系中,都必须牢记:要么总是先持久化主表记录对应的实体,要么设置级联操作;否则当Hibernate试图插入从表记录时,如果发现该从表记录参照的主表记录不存在,那一定会抛出异常。
2.有连接表的N-1关联:使用于在底层数据库建模时使用连接表来建立外键关系映射的关联关系
如果需要使用连接表来映射单向N-1关联,则需要显示使用<join/>元素,该元素用于强制将一个类的属性映射到多张表中。使用<join/>元素时通常需要指定一个table属性,用于指定连接表的表名。
使用<join/>元素映射连接表时还需要外键关联,应在配置文件中增加<key/>子元素来映射外键,并为join元素增加<many-to-one>子元素,用于映射N-1的关联实体。
<class name="Person" table="person_inf">
<join table="person_address">
<key column="person_id/">
<many-to-one name="address" cascade="all" class="Address" column="address_id"/>
</join>
</class>
相关文章推荐
- C++Primer第五版 5.1节练习
- bzoj1032 [JSOI2007]祖码Zuma
- What is an intuitive explanation of the relation between PCA and SVD?
- poj3358 Period of an Infinite Binary Expansion
- LeetCode(57) Insert Interval
- X-Code常用插件
- hdu1521排列组合
- android如何通过TextView实现不同的Activity的切换
- volley
- android的json解析
- CXF
- 计算机网络概述
- 6 Easy Steps to Learn Naive Bayes Algorithm (with code in Python)
- 软件工程的实践项目的自我目标
- 海量数据挖掘MMDS week1: MapReduce
- HDU 5446-Unknown Treasure(Lucas+中国剩余定理)
- mac下无法识别手机usb问题
- NSURLSession
- Mining Massive Datasets - week1: MapReduce
- mac下无法识别手机usb问题