保持多对多参考

时间:2012-11-21 21:37:09

标签: jpa playframework

我有一个产品,我试图将类别关联到。类别列表是静态的。我使用Product属性设置CategorySet<?>之间的双向多对多关系,如下所示:

class Product {

  @ManyToMany
  public Set<Category> categories;

}

class Category {

  @ManyToMany(mappedBy = "categories")
  public Set<Product> products;

}

我希望某些用户能够保持这种关系,但我之前看到的唯一方法就是使用List<Long>传回控制器并适当添加。这工作正常,直到用户需要编辑这些映射。我已经尝试清除这种关系,但这也证明并不简单。

有没有一种体面的方式来维持这种关系?如果我唯一的选择是“循环和删除”引用,有人可以指出我正确的方向如何适当地这样做?到目前为止,我失败的尝试看起来像这样:

for(Category category : product.categories) {
  category.products.remove(product);
}

Category.delete("categories.id = ?", product.id)

1 个答案:

答案 0 :(得分:0)

维护关系:是的,将ID传递给控制器​​并在那里获取实体是可以的。

关系正确,有一些事情需要注意:

首先,您需要设置cascade注释,如果没有,关联中的任何内容都将被删除:

@ManyToMany(cascade=CascadeType.ALL)
public Set<Category> categories;

其次,一个实体是该关系的所有者。在您的情况下,它被正确设置为Product类(因为Category类使用mappedBy)。更新仅反映在所有者上完成的操作,因此要从您要执行的产品中删除所有类别

products.categories = new Set<Product>();

如果您要删除单个类别,只需将其从products.categories删除即可。