Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA收养(与孤儿搬迁相反)_Java_Jpa - Fatal编程技术网

Java JPA收养(与孤儿搬迁相反)

Java JPA收养(与孤儿搬迁相反),java,jpa,Java,Jpa,自从JPA 2.0以来,关系中有了孤立删除属性,这大大简化了父子关系的更新,再加上级联删除,可以删除树的整个分支并将其删除,而无需太多麻烦 然而,也有可能被标记为“收养”的情况,即您将子女转移到另一位家长。在这些情况下,orphanRemoving=true不起作用,因为必须将子对象从其原始父对象的子对象集合中删除,使其成为临时孤立对象,具体取决于删除/添加操作的顺序 根据JPA规范,它还不支持采用 我找不到关于这一点的任何进一步信息,因此要么意味着“采用”是一个错误的术语(尽管我认为它非常合适

自从JPA 2.0以来,关系中有了
孤立删除
属性,这大大简化了父子关系的更新,再加上级联删除,可以删除树的整个分支并将其删除,而无需太多麻烦

然而,也有可能被标记为“收养”的情况,即您将子女转移到另一位家长。在这些情况下,
orphanRemoving=true
不起作用,因为必须将子对象从其原始父对象的子对象集合中删除,使其成为临时孤立对象,具体取决于删除/添加操作的顺序

根据JPA规范,它还不支持采用

我找不到关于这一点的任何进一步信息,因此要么意味着“采用”是一个错误的术语(尽管我认为它非常合适),要么这种情况非常罕见,以至于在规范中没有考虑到,也没有在网络上问到

基本上,我希望删除孤立项,因为它只是添加了一个由另一个父级采用的实体(并且该父级在同一事务中更新,例如通过级联更新公共根)不被视为孤立项,因此不会被删除


对此有什么想法吗?

JPA规范对此并不清楚。然而,我敢打赌,实现中的实际行为与规范中所说的不同,并且与您采用的想法一致——不删除引用的实体更有意义。您确定您的实现(eclipselink、hibernate)不能像您预期的那样工作吗


例如,即使您对一个实体显式地调用em.remove(),hibernate也不会将其从数据库中删除,如果它被另一个实体引用,它只会忽略remove。我不确定孤儿是否也是如此,但我敢打赌。在Eclipselink中,从与wiki相关的文章中可以看出,如果孤儿被另一个实体收养,他们不会删除孤儿,从而解决了这个问题。

Hmm,因为孤儿通常是关系的所有者,他们可以在不破坏一致性的情况下删除,因为对父对象的引用也将被删除。至于EclipseLink的问题:我们也看到了这个问题,但事实是,如果我们设置
orphanRemoving=false
,它会按预期工作,这导致我们假设采用要么不再实现,要么仍然失败。我们也在使用Hibernate,但还没有在那里进行测试。如果您有一个相关文档部分的链接,这将很好。除了EclipseLink bug之外,我没有发现任何关于“领养”的信息,这让我认为搜索词可能并不完全正确。