0

ですから話はとても単純です。

Products と呼ばれる 1 つのテーブルと別の呼ばれるカテゴリがあります。さらに、カテゴリと対応する製品の関係を保持する ProductCategories という別のテーブルがあります (つまり、テーブルには ProductId と ColumnId の 2 つの列があります)。

何らかの理由で、これらすべてのテーブルをエンティティ モデルに追加した後、「アクセス」を持っていないため、myentityModel.ProductCategories を実行できるため、これら 2 つのテーブル間の関係アイテムを作成できます。

そして、そうです、ProductCategores テーブルが "Association" としてエンティティ モデルに追加されます。私は本当にそれを理解していません。

編集:

新しい「Product」の作成の一環として、「Category」の EntityCollection を渡すことができることがわかりました。そのため、エンティティ モデルからクエリを実行して、ユーザーが (Web ページで) 選択した一致するカテゴリのリストを取得します。たとえば、(モデルをクエリした後)「Category」のオブジェクトセットを取得します。ただし、次の 2 つの問題が発生しました。

  1. 「AddObject」は EntityCollection のみを受け入れるため、セットを再作成し、ObjectSet からすべてのオブジェクトを entityCollection に追加する必要があります。このプロセスでは、以前のモデルから切り離して新しいコレクションに追加する必要があります。そうでない場合は、例外が発生します。

  2. SaveChanges を実行すると、新しい ProductCategory を追加するのではなく、実際に新しいカテゴリを作成しようとしているという例外が発生することがわかりました。繰り返しますが、ここで何か不足していますか?

ありがとう。

4

1 に答える 1

0

これは、多対多の関係のように聞こえます。エンティティ モデルでは、結合テーブルを別のエンティティとして宣言する必要はありません。代わりに、製品とカテゴリの間の関係を多対多として構成し、結合テーブルに関するメタデータを追加します。Hibernate では、次のようになります。

    @ManyToMany(targetEntity=Categories.class, cascade={CascadeType.ALL}, fetch = FetchType.LAZY)
    @JoinTable(name="tb_products_categories",
        joinColumns=@JoinColumn(name="category_id"),
        inverseJoinColumns=@JoinColumn(name="product_id")
    )
    @IndexColumn(name="join_id")
    public List<Categories> getCategories() {
        return categories;
    }

クエリを実行すると、ORM レイヤーが SQL の決定とテーブル結合のトラバースを処理します。

于 2011-07-28T17:16:18.420 に答える