13

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 句は、この方法で渡された値を認識しません。この問題の解決策を知っている人はいますか?

4

2 に答える 2

20

あなたの場合、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();
于 2009-05-07T05:47:21.473 に答える