我的客户希望我改变他们的应用程序 - 它使用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主题,但我似乎无法找到解决方案。有人可以帮我这个吗?
(目前我无法访问代码,因此会对其进行描述。)