Hibernate的关系配置(一对多|多对一,多对多)

hibernate中一对多的映射为什么引用set集合而不使用list?

     set是无序不可重复的,list是有序可以重复的。set集合保证在这个集合中,没有重复的对象。

多对一|一对多

一的一方用set集合表示对多的引用

多的一方直接引用一的一方

一对多:

配置:
<set name="集合名" cascade="" inverse="">
    <key column="外键列名数据库"/> //外键名不要和主键名重复
    <one-to-many class="集合类型的类的全路径名"/>
</set>

多对一:

<many-to-one name="对象名" class="对象类的全路径" column="外键列名数据库"/>

cascade:级联操作【none默认不级联】 减少我们书写操作的代码。

        级联:在操作一个对象的时候,是否会操作其相关联的对象。

        save-update  (级联保存更新) 如保存客户就顺便自动保存客户对应联系人

        delete     删除时进行关联

        all      save-update +delete

inverse:反转关系维护,属于性能优化,关系的两端如果都书写了关系,那么两方都会发送维护关系的语句。这样,语句发生重复,我们可以使用inverse使一的一方放弃维护关系。

     true :不维护关系

     false:默认值。维护关系

设置inverse属性,在多对多种维护关联关系的影响?

1) 保存数据

有影响。

inverse=false ,有控制权,可以维护关联关系; 保存数据的时候会把对象关系插入中间表;

inverse=true,  没有控制权, 不会往中间表插入数据。

2) 获取数据

无。

3) 解除关系

 有影响。

 inverse=false ,有控制权, 解除关系就是删除中间表的数据。

inverse=true, 没有控制权,不能解除关系。

4) 删除数据

有影响。

inverse=false, 有控制权。 先删除中间表数据,再删除自身。

 inverse=true, 没有控制权。 如果删除的数据有被引用,会报错! 否则,才可以删除。

在多对多中慎用级联cascade属性,几乎不用。

多对多的配置:

<set name=”集合名” table=”中间表名”>
<key column=”别人引用我”/>
<many-to-many class=”集合泛型类的路径” column=”我引用别人的字段”/>
</set>

如有不同见解,欢迎指正留言。。。 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值