06映射一对多双向关联关系

 
1    Customers 类中加如set类型的 Orders属性,Orders类中加入Customer类型的customer属性。
2     测试时,建立两者一对多的双向关联关系。
     Customers customer=new Customer(“Tom”,new HashSet());
Order order=new Order();
 
建立Customer对象和Orders对象的双向关联关系。
 
order.setCustomer(customer);
customer.getOrders().add(order);
    
 只要将 Set的cascade属性设置为save-update,就可以直接保存customer,与之关联的order对象就会自动被持久化。
     Session.save(customer);
3 set的inverse属性。
   当建立了对象的双向关联关系时,Hibernate会根据:
order.setCustomer(customer);
customer.getOrders().add(order);
     对数据库做两侧更新,其实这里是重复执行了SQL语句,势必会影响到程序的反应速度和性能。
         只要将设置set inverse=”true”,
     < set name = "orderses" inverse = "true" cascade = "save-update" >
            < key >
                < column name = "CUSTOMER_ID" not-null = "true" />
            </ key >
            < one-to-many class = "mypack.Orders" />
        </ set >
这段代码表示:在 Customer Order 的双向关联关系时中, Customer 的关联只是 Order 关联的镜像 . Hibernate 测到持久化对象 Customer Order 对象的状态都发生变化时,仅仅按照 Order 对象的状态变化同步更新数据库。
小结: 1 在映射一对多的双向关联关系时,应该在 one 方把 inverse 属性设成 true ,这样可以提高应用的性能。
      2 在建立两个对象的双向关联时,应该同时修改关联两端的对象的相应属性:
                          order.setCustomer(customer);
customer.getOrders().add(order);
        这样才会使程序更加健壮,提高业务逻辑的独立性。
Cascade delete 属性:如果希望在删除 Customer 对象时同时删除与之关联的 Order 对象。
Cascade all-delete-orphan 属性:
  1 保存或更新 Customer 对象时,级联保存更新所有关联的 Order 对象。相当于: save-update
 2 当删除 Customer 对象时,级联删除所有关联的 Order 对象。相当于: delete
 3 删除不在和 Customer 对象关联的多有 Order 对象
 
  总结: One   To   Many 双相关联
 Java 类中: One 加入 Set 类型的 Many 属性, Many 加入 One 类型的属性。
业务程序中:为了使程序更加健壮,建立 One Many ,和 Many one 的双向关联。
影射文件中:将 One 中的 set inverse 属性设成 true (默认是 false ),这样 Hibernate 不会因为我们在业务逻辑中做的双向关联而产生重复的更新数据库的操作,也提高了效率。
 
                     适当选择 cascade 的值: save-update ,delete , all-delete-orphan
 
 
 
  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值