0

2 つの Hibernate エンティティ A と B があります。A と B の間には ManyToMany 関連付けがあります。

public class A {
  @ManyToMany(targetEntity=B.class)
  @JoinTable(name = "AB",
    joinColumns = @JoinColumn(name="A_FK"),
    inverseJoinColumns = @JoinColumn(name="B_FK"))  
  private Set<B> collectionOfB = new HashSet<B>();
  // ...
}

public class B {
  // no reference to A
}

B要素の配列{b1、b2、...、bn}があります。

上記のリストのすべての B 要素に関連付けられているすべての A 要素を検索する必要があります ({b1、b2、...、bn} のすべての要素は collectionOfB にある必要があります)。

だから私はこのようなことをしなければなりません:

select * from A as a where {b1, b2,... ,bn} in a.collectionOfB 

しかし、これは不可能です:-(

これに対処する方法を知っている人はいますか?

ありがとう

カムラン

4

2 に答える 2

0

調査の結果、私の問題に対処する最も簡単な方法は、ネイティブ SQL を使用することであることがわかりましたsession.createSQLQuery(sql)

と:

sql="select a.* from A a where ...";
for (Long bId: myListOfBcriteria) {
  sql += " and " + bId+ " in (select ab.b_fk from AB ab where ab.a_fk=a.id)";
}

どこでmyListOfBcriteria={b1, b2,... ,bn}

おそらくそれはあまり「いい」ことではありませんが、うまく機能します:-)

これが誰かを助けることができることを願っています、

カムラン

于 2013-01-28T13:42:29.867 に答える
0

マッピングが正しい場合は、次のことができます。

    sql="select a.* from A a where ...";
    for (Long bId: myListOfBcriteria) {
        sql += " and " + bId+ " in (select ab.b_fk from AB ab where ab.a_fk=a.id)";
    }

休止状態で。

    select a from A join a.collectionOfB as ab where ab.id in (:collectionOfB)

ORM を使用する場合は、絶対に使用できない場合を除き、使用する必要があります。

于 2013-01-27T22:15:05.020 に答える