以下内容整理自《精通Hibernate》第二版
注:既然是双向关联,“一对多双向关联”和“多对一双向关联”是同一回事。
对象位于内存中,在内存中从一个对象导航到另一个对象显然比到数据库中查询数据的速度快多了。但是复杂的关联关联也会给编程带来麻烦,因此类与类之间是建立单向关联还是双向关联要由业务需求决定。
如果软件应用有大量这样的需求:
1、根据给定的客户,查询该客户的所有订单。
2、根据给定的订单,查询发出订单的客户。
根据以上需求,不妨为Customer类和Order类建立一对多双向关联。在上篇文章中介绍了Hibernate如何建立多对一的单向关联(Order类到Customer类的多对一关联),在此不再赘述。
增加Customer类到Order类的一对多关联,首先需要在Customer类中增加一个集合类型的orders属性:
<span style="font-size:18px;">/** 在定义orders集合属性时将它初始化为集合实现类的一个实例, *这可以提高程序的健壮性,避免应用程序访问取值为null的orders集合的方法而抛出NullPointerException */ private Set orders = new HashSet(); public Set getOrders(){ return orders; } public void setOrders(Set orders){ this.orders = orders; }</span>
<span style="font-size:18px;"><set name="orders" cascade="save-update" > <key column="CUSTOMER_ID" /> <one-to-many class="mypack.Order"/> </set></span>
name:设定待映射的持久化类的属性的名字,此处为Customer类的orders属性。
cascade:当取值为"save-update",表示级联保存和更新。
<key>子元素:设定父方在子放中的外键,此处为“CUSTOMER_ID”,表明ORDERS表通过外键CUSTOMER_ID参照CUSTOMER表。
<one-to-many>子元素:表明orders集合中存放的是一组Order对象。
如果希望Hibernate删除Customer对象时,自动删除和Customer关联的Order对象,可以把cascade属性设为“delete”。
如果希望Hibernate自动删除不再和Customer对象关联的Order对象,可以把cascade属性设为“all-delete-orphan”。
原文地址:http://blog.csdn.net/nangongyanya/article/details/47009787