0

オブジェクトをItem含むクラスがSetありTagます。ここで、JPA (Hibernate 4.1.9 に基づく) で必要なすべてのタグを含むすべてのアイテムを検索したいと考えています。

私のリポジトリ メソッドは java.util.Set を取得し、このメソッドの本体は次のようになります。

entityManager.createQuery("select item from Item as item where item.tags in :tags")
.setParameter("tags", tags)
.getResultList()

私にはこの解決策のように見えますが、表示されるのはエラーメッセージだけです:

IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: サブツリーの予期しない終了 [() 内の item.tags の項目として models.Item から項目を選択]

条件をひっくり返すと

"select item from Item as item where :tags in item.tags"

(上記のクエリの代わりに)正しいと思うものNullPointerException、最後の行に a が表示されます(getResultList())。

なにが問題ですか?

4

1 に答える 1

0

tagsコレクションが空であるか、null である可能性があるため、このエラーが発生することが知られています (一例として、このブログを参照しください)。これにより、エラーに表示されるクエリが生成されます。

select item from models.Item as item where item.tags in ()

これをデータベースに送信すると、エラーが発生する可能性があります (たとえば、ERROR 1064 (42000)MySQL では構文エラー)。

tagsパラメータとしてクエリに追加する前に、空でないことを検証する必要があります。

于 2013-01-14T22:13:56.390 に答える