0

次のシナリオの休止状態基準を使用してクエリを作成しようとしています。

  • 2 つのエンティティ: インジケータとレポート (それぞれに独自のテーブル、クラスなどがあります)
  • インジケーターはゼロから多数のレポートで使用できます
  • レポートはゼロから多くのインジケーターを使用します
  • したがって、関係を格納する交差テーブルがあります
  • 関係は、クラスとその休止状態のマッピングの両方で定義されます
  • UI では、ユーザーは 1 つまたは複数のレポートを (特に) 選択できます。これらのレポートで使用されるインジケーターについて DB にクエリを実行したいと思います。

私は次のことを試しました:

criteria.add(Restrictions.in("Reports", selectedReports));

しかし、私が得るのは奇妙なSQLステートメントだけです

where this_.Indicator_ID in (?)

その後、JDBC 例外 (パラメータがありません)

何か案は?ありがとう。

注: Hibernate Criteria を使用して ManyToManyrelationship を照会する方法を調べましたが、受け入れられている解決策は、カスタムの sql-string を作成することです ...

4

3 に答える 3

4
  Criteria c = session.createCriteria(Indicator.class);
    c.add(Restrictions.eq("someField", myObject).createCriteria("reports")
    .add(Restrictions.eq("reportName", name);
    c.list();

他のエンティティのコレクションに保持されているエンティティへのサブ条件を作成する必要があります。

String[] selectedReportsId = {"1", "2", "3"};
 c.add(Restrictions.eq("someField",myObject).createCriteria("reports")
    .add(Restrictions.in("id", selectedReportsId);

次に、ここから結果の変換について少し確認してください: https://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/querycriteria.html#querycriteria-associations

また、これは基準で何ができるかを明らかにするかもしれません: http://www.hibernate.org/hib_docs/v3/api/org/hibernate/criterion/Restrictions.html

于 2009-01-02T19:21:19.660 に答える
0

今のところ、これが私がそれを機能させる方法です(zmfに感謝します)。

Criteria subcrit = criteria.createCriteria("Reports");
Disjunction dis = Restrictions.disjunction();
for (Reports r : selectedReports) {
    dis.add(Restrictions.idEq(r.getID()));
}
subcrit.add(dis);

これは、zmfが提案したものとほぼ同じです。私が追加したのは、渡されるコレクションから基準を構築するための論理和だけでした。

あとは、コレクションを直接使用するだけです...

于 2009-01-02T21:01:46.153 に答える
0

必要に応じて、「hibernate hql many-to-many」を検索した後に Google が返したいくつかの提案を次に示します。

http://patf.net/blogs/index.php?blog=2&c=1&more=1&pb=1&tb=1&title=many_to_many_in_hql

そしてHibernateフォーラムから:

http://forum.hibernate.org/viewtopic.php?p=2340747&sid=d4c8d2fcc16aed0201f73eb74619692a

そしてSpringフォーラムから:

http://forum.springframework.org/showthread.php?t=36870

これらが役立つことを願っています。

于 2009-01-02T19:50:39.463 に答える