0

カテゴリを関連付けようとしている商品があります。カテゴリのリストは静的です。私は、次のようなプロパティ間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)
4

1 に答える 1

0

関係の維持:はい、IDをコントローラーに渡し、そこにあるエンティティをフェッチしても問題ありません。

適切な関係、注意すべきことがいくつかあります:

まず、注釈を設定する必要があります。cascade注釈がないと、関連付けの何も削除されません。

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

次に、1つのエンティティがリレーションの所有者です。あなたの場合、それはクラスとして正しく設定されていますProductCategoryクラスが使用するようにmappedBy)。更新は所有者に対して行われた場合にのみ反映されるため、製品からすべてのカテゴリを削除するには、

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

単一のカテゴリを削除する場合は、から削除するだけproducts.categoriesです。

于 2012-11-22T08:00:53.487 に答える