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>

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

发布了91 篇原创文章 · 获赞 1 · 访问量 3229

猜你喜欢

转载自blog.csdn.net/duan196_118/article/details/104122865