java – Hibernate多对多映射和cascade = delete
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Hibernate多对多映射和cascade = delete,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1605字,纯文字阅读大概需要3分钟。
内容图文
我有一个映射(只有重要的部分):
<class name="xyz.Role" table="ROLE" lazy="true"> <id name="id" type="java.lang.Integer"> <column name="ROLE_ID"/> <generator class="increment"/> </id> <set name="assignments" lazy="true" table="PERSON_ROLE" cascade="delete" inverse="true"> <key column="ROLE_ID" /> <many-to-many class="xyz.Person" column="PERSON_ID" /> </set> </class>
和
<class name="xyz.Person" table="PERSON" lazy="true"> <id name="Id" type="java.lang.Integer"> <column name="TPP_ID"/> <generator class="increment"/> </id> <set name="roles" lazy="true" table="PERSON_ROLE" cascade="save-update"> <key column="PERSON_ID" /> <many-to-many class="xyz.Role" column="ROLE_ID" /> </set> </class>
使用此映射,当我删除角色时,也会删除具有此角色的人员.我想要实现的是删除Role时删除关联(PERSON_ROLE表中的行).有没有办法实现这个目标?
解决方法:
Cascade适用于实体级别.由于Person_Role未映射为实体,因此级联无法帮助您AFAIK.
您可以在从Person_Role到Role的外键上使用数据库级“on cascade delete”.
或者你可以 – 正如sfussenegger指出的那样 – 以编程方式删除关联.请注意,由于您在两个实体上映射了关联,因此Person_Role中的每一行都将在对象模型中出现两次.在这种情况下,建议从两个集合中删除相关条目,以免破坏对象模型.然而,Hibernate只会在持久化更改时查看未使用inverse =“true”映射的关联的结尾.也就是说,要从与当前映射的关联中删除,必须从Person.roles中删除,而不是从Role.assignments中删除:
for (Person p : role.assignments) {
person.roles.remove(role)
}
或者您可能希望用关联实体替换多对多映射,在这种情况下,您可以简单地使用级联.这样您就可以更轻松地向作业添加更多信息.例如,如果您必须表达“Joe在QA上工作30%,在需求工程师中工作70%”,您可以简单地将该字段添加到关联中.
内容总结
以上是互联网集市为您收集整理的java – Hibernate多对多映射和cascade = delete全部内容,希望文章能够帮你解决java – Hibernate多对多映射和cascade = delete所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。