JPA 2.0 orphanRemoval = true VS删除级联
我对JPA2.0
orphanRemoval
属性感到有点困惑。
当我使用我的JPA提供程序的数据库生成工具来创建底层数据库DDL以在特定关系上具有ON DELETE CASCADE
时,我想我可以看到它是必需的。
但是,如果数据库存在且关系上已经有一个ON DELETE CASCADE
,这是不是足以级联删除? orphanRemoval
又做了什么?
干杯
没有找到相关结果
已邀请:
7 个回复
犀耽澄协吻
与
无关。
完全是ORM特有的。它标记“子”实体,当它不再从“父”实体引用时被删除,例如从父实体的相应集合中删除子实体时。
是特定于数据库的东西,当删除“父”行时,它会删除数据库中的“子”行。
悍蕾驮苇袜
实体对象时,删除操作将级联到引用的
实体对象。在这方面,
和
是相同的,如果指定
,则
是多余的。 两个设置之间的区别在于断开关系的响应。例如,将地址字段设置为
或另一个
对象时。 如果指定
则断开
实例 自动删除。这对清理依赖很有用 没有引用的对象(例如
)不应该存在 所有者对象(例如
)。 如果仅指定
,则不执行自动操作 因为断开关系不是一个删除 操作。 为避免因孤立删除而悬挂引用,仅应为包含私有非共享依赖对象的字段启用此功能。 我希望这更清楚。
肉脓措伪
捕暑句簿姓
的等效JPA映射是
。孤立删除意味着在与其“父”实体的关系被销毁时删除依赖实体。例如,如果某个孩子从
关系中删除而未在实体管理器中明确删除它。
春驹晴陪
vs
,这帮助我理解。 总结:
与
完全相同只要我们删除对象(
)并且我们也希望删除子对象。 在完全不同的情况下,当我们获取一些数据如
然后使用
删除一个孩子(
)将导致对应于
的实体将从数据库中删除。
砷竣阿
//父实体
在这种情况下,关系是学生实体是关系的所有者,因此我们需要保存学生实体以便保持整个对象图,例如
这里我们使用两个不同的学生对象映射相同的指南,并且由于使用了CASCADE.PERSIST,因此对象图将在数据库表中保存如下(在我的情况下为MySql) 学生表: - ID Name Dept Id_Guide 1     Roy      ECE     1 2    尼克     ECE     1 指南表: - ID NAME薪水 1    &约翰NBSP;     $ 1500 现在,如果我想删除其中一个学生,请使用
当删除学生记录时,也应删除相应的指南记录,即学生实体中的CASCADE.REMOVE属性进入图片及其作用的位置;它将删除具有标识符1的学生以及相应的指南对象(标识符) 1)。但是在这个例子中,还有一个学生对象被映射到同一个指南记录,除非我们在指南实体中使用orphanRemoval = true属性,否则上面的删除代码将不起作用。
伞腹