1. ホーム
  2. java

[解決済み] HQLまたはJava Persistence Query LanguageにおけるIN句

2023-07-04 18:34:53

質問

以下のようなパラメータ付きのJPA、またはHibernateのクエリを持っています。

SELECT entity FROM Entity entity WHERE name IN (?)

パラメータをArrayList<String>として渡したいのですが、可能でしょうか?Hibernateの電流は私に、次のように伝えます。

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

これは全く可能なのでしょうか?

回答 : パラメータとしてのコレクションは、"のような名前付きパラメータでのみ機能します。 :name のようなJDBCスタイルのパラメータではなく、" ? のようなJDBCスタイルのパラメータではありません。

どのように解決するのですか?

Hibernateの Query オブジェクトを使用していますか、それともJPAですか?JPAの場合、問題なく動作するはずです。

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

Hibernateの場合は、setParameterListを使用する必要があります。

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