0

休止状態の基準を使用してDAO内でクエリを作成する必要がありますが、方法がわかりません。

A と B の 2 つのエンティティと、A と B の両方の ID を含む関連付けテーブルがあります。AはBを知りませんし、BはAを知りません。

基準を使用して、特定の B に関連付けられているすべての A を検索したいと考えています。

図を作成しました。説明に役立つことを願っています。

サンプル画像 ここに画像の説明を入力

ご覧のとおり、テーブル A には 3 つのレコードがあり、テーブル B にも 3 つのレコードがあり、テーブル AssocAB にも 3 つのレコードがあります。AssocAB で B1 に関連付けられているすべての A を検索したいと考えています。クエリは A1 と A3 を返す必要があります。

出来ますか?

ここにクラスと、注釈が付けられた関係があります。

エンティティ A: 注釈なし

エンティティ B: エンティティ A のセットを持つ

@ManyToMany
@JoinTable(name = "Assoc_AB", joinColumns = { @JoinColumn(name = "ID_B")},  inverseJoinColumn = { @JoinColumn(name = "ID_A")})
@ForeignKey(name = "FK_A_B", inverseName = "FK_B_A")
public set<A> getA(){
    return this.listOfA;
}

また、関連クラスのクラスはありません。B のマッピングにより、関連テーブルが作成されます。

前もって感謝します。

4

1 に答える 1

0

私はあなたの指示で基準クエリを書き込もうとしましたが、それは簡単ではありません。なぜなら、あなたはそれABテーブルに があると言っていますが、行 ( 、...)int IDを入れています。あなたはintではなくaだと思いました。次のようなものが必要です。Strings"A1""B1"idString

List<A> listOfA = new ArrayList<A>();
Criteria criteria = session.createCriteria(B.class, "b");
criteria.add(Restrictions.eq("b.id", "B1"));
List<B> listOfBs = criteria.list();
for (B b : listOfBs) {
    listOfA.addAll(b.getA());
}

nameクラスにプロパティがある場合はB、制限を変更する必要があります。

criteria.add(Restrictions.eq("b.name", "B1"));

このコードが問題の解決に役立つことを願っています。

于 2013-06-29T19:04:03.060 に答える