[英]How to delete a many-to-many association between two entities?
假设我有两个实体,并且在Hibernate中映射它们之间的双向多对多关系。
两个类中的xml配置如下所示:
<hibernate-mapping>
<class name="com.example.MyEntity">
<set name="myOtherEntities" cascade="all-delete-orphan">
<key column="entity_id"/>
<many-to-many column="my_other_entity_id" class="com.example.OtherEntity" />
</set>
</class>
</hibernate-mapping>
如何在不删除任何实体的情况下仅终止它们之间的关联?
如果我clear()
MyEntity
的集合并调用Session.flush()
那么MyOtherEntity
对象将被删除,但我只想清除连接表中的记录。
我认为删除orphan属性会触发MyOtherEntity
的删除。
应该用cascade="all"
代替
问候。
附录:Hibernate doc在第11章中指出,cascade all-delete-orphan
不应该与ManytoMany
关系一起使用。
有两种方法可以用来做到这一点。
1)使用Hibernate Native Query 2)使用Hibernate createSQLQuery()
此方案中的正确设置是cascade="none"
。
many-to-many
关系中的Hibernate必须与3个表一起使用。 MyEntity
, OtherEntity
和配对表MyEntity-OtherEntity
。
一旦我们通过将MyEntity
实例添加到OtherEntity
集合中来创建关系,反之亦然,Hibernate将隐藏地将记录插入到配对表中。 一旦我们从集合中删除了一些实例,Hibernate将从配对表中删除记录。
这样做,设置cascade="none"
。 因为它是如何处理它的唯一方法。 从配对表的角度来看,没有级联
任何应用于many-to-many
关系的级联都不适用于配对表,而是适用于第二端。 在大多数情况下,这是我们不想要的。 我们应该将DAO分离为MyEntity
管理和OtherEntity
管理。
在极少数情况下,在更新一端时,我们要插入,更新甚至删除其他...我们可以使用级联。 但这不是我们的情况。
在此方案中使用此设置
<set name="myOtherEntities" cascade="none">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.