1

我对 JPA (EclipseLink) 有疑问。我无法删除关联表。这是这种情况:

  • 产品 1:n 到 ProductResource
  • 资源 1:n 到 ProductResource

我首先设置 ProductResource 的产品和资源属性。如果我然后尝试删除 ProductResource 对象,则没有任何反应(没有生成 sql - 没有例外)。如果我注释掉 ProductResource 中的两个 OneToMany 注释,我可以删除该对象。我也可以在未设置产品和资源属性时删除对象。如果我仅注释掉资源属性上方的注释,则 ProductResource 对象会在删除产品对象时被删除(cascade=CascadeType.ALL)。我希望有人能给我一个提示。谢谢你。

产品资源:

public class ProductResource implements Serializable {
 @ManyToOne(fetch=FetchType.EAGER, cascade=CascadeType.MERGE)
 private Product product;

 @ManyToOne(fetch=FetchType.EAGER, cascade=CascadeType.MERGE)
 private Resource resource;

产品:

public class Product implements Serializable {

 @OneToMany(mappedBy="product", fetch=FetchType.EAGER, cascade=CascadeType.ALL)
 private List<ProductResource> productResources = new ArrayList<ProductResource>();

资源:

public class Resource implements Serializable {

 @OneToMany(mappedBy="resource", fetch=FetchType.EAGER, cascade=CascadeType.ALL)
 private List<ProductResource> productResources = new ArrayList<ProductResource>();

问候马塞尔

4

2 回答 2

0

The following was the solution:

Product class

@PrivateOwned
@OneToMany(mappedBy="product", fetch=FetchType.EAGER, cascade=CascadeType.ALL)
private List<ProductResource> productResources = new ArrayList<ProductResource>();

Resource class

@PrivateOwned
@OneToMany(mappedBy="resource", fetch=FetchType.EAGER, cascade=CascadeType.ALL)
private List<ProductResource> productResources = new ArrayList<ProductResource>();

@PrivateOwned is new...

Marcel

于 2010-03-20T19:51:56.710 回答
0

实际上有3个解决方案:

1) 在删除 ProductResource 对象之前删除孤儿。ProductResource 没有被删除的原因是系统中仍然存在引用它们的对象。

2) 删除孤儿中对 ProductResource 对象的引用。这与上述原因相同。

3)使用 JPA 注释将 Product 和 Resource 对象设置为@PrivateOwned 。如果孤儿存在,这将导致它们被自动删除。这是您可能希望或可能不希望为您自动完成的行为。一个原因可能是因为 Product 或 Resource 对象不需要对 ProductResource 的引用才能存在。这取决于您的设计。

于 2010-03-20T20:07:54.130 回答