Hibernate 建立一对多双向关联关系

以下内容整理自《精通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>

之后在Customer类的Hibernate映射文件中添加以下内容:

<span style="font-size:18px;"><set
    name="orders"
    cascade="save-update"
    >
    <key column="CUSTOMER_ID" />
    <one-to-many class="mypack.Order"/>
</set></span>

<set>元素包括以下属性。

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”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值