0

我有一个产品,我正在尝试将类别关联到该产品。类别列表是静态的。我已经建立了双向多对多关系,ProductCategory使用Set<?>如下属性:

class Product {

  @ManyToMany
  public Set<Category> categories;

}

class Category {

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

}

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

有没有一种体面的方式来维持这种关系?如果我唯一的选择是“循环和删除”引用,有人能指出正确的方向吗?到目前为止,我失败的尝试如下所示:

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

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

1 回答 1

0

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

关系得当,有几点需要注意:

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

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

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

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

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

于 2012-11-22T08:00:53.487 回答