如何让OpenJPA以递归方式移除儿童及其子女?

时间:2016-02-13 09:45:43

标签: java hibernate jpa openjpa

我的客户希望我改变他们的应用程序 - 它使用JPA-,以便当前的Hibernate提供程序被OpenJPA提供程序替换。我没有OpenJPA经验,我希望只需要做一些配置来实现这个目标。我从persistence.xml中删除了Hibernate提供程序和属性,并添加了一些OpenJPA属性。我将OpenJPA设置为服务器上的默认提供程序(WebSphere Application Server 8.0)。

当应用程序启动时,它会尝试从父项A中删除子B。 B本身有子C,应从B中删除,子D应从C中删除。它们都是通过注释配置的,双向:@OneToMany和@ManyToOne组合用于每个父/子关系。父方都具有属性mappedBy =“[parent class name lowercase]”,cascade = CascadeType.ALL。

实现Hibernate之后,通过遍历所有元素B,通过使用entityManager.delete显式删除它们并最终清空B的集合,这非常有效。所有的C和D也都被删除了。

实施OpenJPA会导致FK约束违规:看起来它在删除C和D之前试图删除B.

我尝试将orphanRemoval = true添加到所有@OneToMany注释中。在这种情况下,只需清空B的集合而不首先明确删除它们。同样的问题。

我查看了许多文章和StackOverflow主题,但我似乎无法找到解决方案。有人可以帮我这个吗?

(目前我无法访问代码,因此会对其进行描述。)

0 个答案:

没有答案
相关问题