攻城狮在路上(壹) Hibernate(五)--- 映射一对多关联关系
关联是有方向的,包含单向关联和双向关联。分别讨论。
本文以客户Customer和订单Order来进行讨论:一个Customer有多个Order,每个Order对应一个Customer。
Customer对象代码:
public class Customer { private long id; private String name; private Set<Order> orders; ... }
Order对象代码:
public class Order implements java.io.Serializable { private long id; private String orderNumber; private Customer customer;
... }
一、建立多对一的单向关联关系:
配置文件代码:
<many-to-one name="customer" column="CUSTOMER_ID" class="mypack.Customer" cascade="save-update" not-null="true" lazy="false" />
属性说明:
A、name:待持久化类的属性名。 B、column:设定和待映射的持久化类的属性对应的表的外键。此处为ORDERS表的外键customer_id. C、class:设定待映射的持久化类的属性的类型。 D、cascade:级联保存和更新,详见后续说明。 E、not-null:该属性不能为空,引用临时对象也可能会报错(提供了cascade级联设置之后可以避免) F、lazy:懒加载,后续说明。
二、映射一对多双向关联关系:
配置文件代码:
<set name="orders" inverse="true" cascade="save-update" > <key column="CUSTOMER_ID" /> <one-to-many class="mypack.Order" /> </set>
属性说明:
name:设定待持久化类的属性名。 cascade:级联属性设置。none\save-update\delete\all-delete-orphan inverse:默认值为false,是否由该端维护关联关系。当值为false时维护,不想在该端维护时将其设置为true。 <key>元素:说明ORDERS表通过外键CUSTOMER_ID参照CUSTOMERS表。 <one-to-many>:说明orders集合中存放的是一组Order对象。
三、映射一对多双向自身关联关系:
另一种可能的需求类似于分类体系。
Cat中可能有上级分类,也有下级分类,此种情况就会出现一对多双向自身关联。
解决方案就是上面两种情况的结合。
(声明:该文所有内容均来自《精通Hibernate:Java对象持久化技术详解》[孙卫琴 电子工业出版社] 一书。该文的目的仅仅作为学习笔记。若需要转载,请注明原书相关信息。)