从JPA 2.0开始,关系的orphanRemoval
属性极大地简化了父子关系的更新,并且与级联删除一起允许删除树的整个分支并删除它而没有太多麻烦
然而,也有一些案例可能被标记为"领养",即您将孩子移到另一个父母。在这些情况下,orphanRemoval=true
无法正常工作,因为根据删除/添加操作的顺序,孩子必须从其原始父母的子集合中删除,使其成为临时孤儿。
根据this EclipseLink wiki entry,JPA规范并不支持采用(尚未)。
我无法找到有关此内容的任何进一步信息,因此这意味着"采用"是错误的术语(虽然我说这很合适)或者这种情况很少见,不会在规范中考虑并在网上询问。
我基本上喜欢的是孤儿删除,因为它只是添加了另一个父级采用的实体(并且此父级在同一事务中更新,例如通过级联更新公共根)不被认为是一个孤儿,因此没有被删除。
有关于此的任何想法吗?
答案 0 :(得分:1)
JPA规范对此并不清楚。但是,我敢打赌,实现中的实际行为与规范所说的不同,并且与您的采用理念相对应 - 更有意义的是不删除引用的实体。你确定你的实现(eclipselink,hibernate)它不能像你期望的那样工作吗?
例如,即使你明确地在一个实体上调用em.remove(),如果它被另一个实体引用,hibernate也不会将它从数据库中删除,它只会忽略remove。我不确定孤儿是否适用,但我敢打赌。在Eclipselink中,从似乎与维基文章相关的issue,他们通过不删除孤儿来解决问题,如果它们被另一个实体采用的话。