3

Playフレームワークでクエリを作成しようとしています。

select * from Candidate c where (:schools member of c.schools) 

:schoolを1つの要素でListにバインドすると結果が返されますが、Listを複数の要素でバインドしても何も起こりません。

Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: {vector} [select c from models.Candidate c where (:schools0_, :schools1_ member of c.schools)  group by c.id order by RAND()]

実は私は次のようなものが必要です

select * from candidate where schools in (x,x,x,x,x);

候補者と学校の関係はリンクされた表にあります。

複数の値をバインドする方法はありますか?

4

2 に答える 2

4

実際、問題がどこにあるかを見つけました。のメンバーは単一の値でのみ使用でき、正常に機能します。複数の値を使用する必要がある場合は、次の場所で標準SQLを使用するのが最適です

 select c from Candidate c inner join c.schools as school where school.id in (25980,25981)"

リンクされたテーブルを結合する必要があります。c.schools.idは使用できないため、c.schoolsをエイリアスで内部結合して列を指定する必要があります。

すべての初心者はhttp://www.javatx.cn/hibernate/reference/en/html/queryhql.htmlを確認する必要があると思います

于 2010-09-28T15:33:29.653 に答える
1

Hibernateを使用すると、リスト自体を直接使用することもできます。

select c from Candidate c join c.schools as school where school.id in (:schools)

:schoolsパラメーターのタイプは、IDに従って入力されます(例:List<Int>または)List<Long>

于 2010-11-19T06:22:38.680 に答える