2012-11-21 92 views
0

我有一個產品,我試圖將類別關聯到。類別列表是靜態的。我已經設置了雙向多到很多ProductCategory之間的關係了使用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

維護關係:是的,路過的ID控制器和打水的實體存在是好的。

的關係正確的,有一些事情需要注意:

首先,你需要設置cascade註釋,沒有它沒有在ASSOCATION將被刪除:

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

其次,一個實體是關係的所有者。在你的情況下,它正確設置爲Product類(因爲Category類使用mappedBy)。對車主進行更新時,只反映了,所以從產品中移除所有類別,你會做

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

,如果你想刪除單個categorie,距離products.categories刪除它。