ネイティブSQLクエリでIN句を使用する
-
06-07-2019 - |
質問
JPAエンティティを返すために、ネイティブSQLクエリのIN句を動的に生成しようとしています。 HibernateはJPAプロバイダーです。コードは次のようになります。
@NamedQuery(
name="fooQuery",
queryString="select f from Foo f where f.status in (?1)"
)
....
Query q = entityManager.createNamedQuery("fooQuery");
q.setParameter(1, "('NEW','OLD')");
return q.getResultList();
これは機能しません。in句は、この方法で渡された値を認識しません。誰もがこの問題の解決策を知っていますか?
解決
JPAは、名前付きリストパラメーターをサポートしています。あなたの場合:
@NamedQuery(
name="fooQuery",
queryString="select f from Foo f where f.status in (?1)"
)
Query q = entityManager.createNamedQuery("fooQuery");
List<String> listParameter = new ArrayList<>();
listParameter.add("NEW");
listParameter.add("OLD");
q.setParameter(1, listParameter);
return q.getResultList();
他のヒント
クエリに複合パラメータを使用するのではなく、個別に分割することをお勧めします。 ( 'NEW'、 'OLD')
を指定しないでください。 'NEW'
と 'OLD'
の個別のパラメーターを指定します。それが役立つかもしれません。
これはもちろん、パラメーターの長さが未定義の場合に問題を引き起こす可能性があります。
所属していません StackOverflow