2011-01-28 6 views
64

私は、次のparametrised JPAを持っている、または休止状態、クエリ:もしくはれるJava Persistence問い合わせ言語

SELECT entity FROM Entity entity WHERE name IN (?) 

私はArrayListに< Stringとしてパラメータを渡したい>、これは可能ですか?ハイバネーション電流が私に伝えます。その

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String 

これはまったく可能ですか?

ANSWER:コレクションのパラメータだけではない「?」などのJDBCスタイルのパラメータで、「:name」のような名前のパラメータで動作するよう。

+1

この質問にあなたの回答を追加してもよろしいですか?私はそれが古いものだと知っていますが、あなたの質問に自己答弁することは許されるだけではなく、明示的に奨励されています。 – Makoto

答えて

123

HibernateのQueryオブジェクト、またはJPAを使用していますか? JPAのために、それが正常に動作する必要があります:

String jpql = "from A where name in (:names)"; 
Query q = em.createQuery(jpql); 
q.setParameter("names", l); 

をHibernateのために、あなたはsetParameterList使用する必要があります:実際のプロバイダとしてにHibernate 5.0.2.Final

String hql = "from A where name in (:names)"; 
Query q = s.createQuery(hql); 
q.setParameterList("names", l); 
+0

Okey、問題は使用していましたか?パラメータを指定する。名前付きパラメータのような:ピーターこれは動作します。 – Daniel

+0

リスト内の各文字列の引用符は必要ありませんか? – CCC

+0

String [] arrayをクエリパラメータとして設定する方法 – priyadarshini

18

HQLでは、クエリパラメータを使用してsetParameterListメソッドを使用してCollectionを設定できます。

Query q = session.createQuery("SELECT entity FROM Entity entity WHERE name IN (:names)"); 
    q.setParameterList("names", names); 
3

純粋なJPAを使用します以下では、同様の位置パラメータで動作するようです:

Entity.java:

@Entity 
@NamedQueries({ 
    @NamedQuery(name = "byAttributes", query = "select e from Entity e where e.attribute in (?1)") }) 
public class Entity { 
    @Column(name = "attribute") 
    private String attribute; 
} 

Dao.java:

public class Dao { 
    public List<Entity> findByAttributes(Set<String> attributes) { 
     Query query = em.createNamedQuery("byAttributes"); 
     query.setParameter(1, attributes); 

     List<Entity> entities = query.getResultList(); 
     return entities; 
    } 
} 
3

は括弧を除外し、単に少なくとも休止状態で動作し、今「setParameterを使用」を呼び出します。

String jpql = "from A where name in :names"; 
Query q = em.createQuery(jpql); 
q.setParameter("names", l); 
関連する問題