3 回答
TA贡献1836条经验 获得超13个赞
orphanRemoval
与无关ON DELETE CASCADE
。
orphanRemoval
是一个完全ORM特定的东西。当不再从“父”实体中引用“子”实体时,例如,当您从父实体的相应集合中删除子实体时,它会将“子”实体标记为要删除。
ON DELETE CASCADE
是特定于数据库的事物,当删除“父”行时,它将删除数据库中的“子”行。
TA贡献1886条经验 获得超2个赞
此处采用的示例:
当一个Employee实体对象被移除,删除操作被级联到引用的Address实体对象。在这方面,orphanRemoval=true和cascade=CascadeType.REMOVE相同,并且如果orphanRemoval=true指定,CascadeType.REMOVE则是多余的。
两种设置之间的区别在于对断开关系的响应。例如,例如当将地址字段设置null为另一个Address对象或另一个对象时。
如果orphanRemoval=true指定为,则断开连接的Address实例将自动删除。这对于清除Address没有所有者对象(例如Employee)的引用不应该存在的依赖对象(例如)很有用。
如果仅cascade=CascadeType.REMOVE指定,则不执行任何自动操作,因为断开关系不是删除操作。
为避免因孤立删除而导致引用悬而未决,应仅对包含私有非共享依赖对象的字段启用此功能。
我希望这一点更加清楚。
TA贡献1856条经验 获得超11个赞
从集合中删除一个子实体之后,您也将从数据库中删除该子实体。orphanRemoval还意味着您无法更改父母;如果有一个部门有员工,那么一旦您将该员工删除以放入另一个部门,您将无意中在刷新/提交时将该员工从数据库中删除(以先到者为准)。士气是将orphanRemoval设置为true,只要您确定该父级的子级在整个存在期间都不会迁移到另一个父级即可。启用orphanRemoval也会自动将REMOVE添加到级联列表。
- 3 回答
- 0 关注
- 1123 浏览
添加回答
举报