2009-05-06 41 views
11

JPAエンティティを返すネイティブSQL問合せに対してIN句を動的に生成しようとしています。 HibernateはJPAプロバイダです。私たちのコードはこのように見えます。ネイティブSQL問合せでIN句を使用する

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

+0

のですか? –

答えて

15

JPAはあなたのケースでは、名前付きリストのパラメータをサポートしています。ここで、あなたのネイティブSQLクエリは

@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(); 
0

クエリに複合パラメータを使用せず、個別に分割することをお勧めします。 ('NEW','OLD')を指定しないでください。 'NEW''OLD'の個別のパラメータを指定します。それは助けるかもしれません。

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

関連する問題