我有一个产品,我试图将类别关联到。类别列表是静态的。我使用Product
属性设置Category
和Set<?>
之间的双向多对多关系,如下所示:
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)
答案 0 :(得分:0)
维护关系:是的,将ID传递给控制器并在那里获取实体是可以的。
关系正确,有一些事情需要注意:
首先,您需要设置cascade
注释,如果没有,关联中的任何内容都将被删除:
@ManyToMany(cascade=CascadeType.ALL)
public Set<Category> categories;
其次,一个实体是该关系的所有者。在您的情况下,它被正确设置为Product
类(因为Category
类使用mappedBy
)。更新仅反映在所有者上完成的操作,因此要从您要执行的产品中删除所有类别
products.categories = new Set<Product>();
如果您要删除单个类别,只需将其从products.categories
删除即可。