質問

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' の個別のパラメーターを指定します。それが役立つかもしれません。

これはもちろん、パラメーターの長さが未定義の場合に問題を引き起こす可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top