HQL或Java持久性查询语言中的IN子句

Dan*_*iel 75 java hibernate jpa hql jpql

我有以下参数化的JPA或Hibernate查询:

SELECT entity FROM Entity entity WHERE name IN (?)
Run Code Online (Sandbox Code Playgroud)

我想将参数作为ArrayList <String>传递,这可能吗?Hibernate电流告诉我,那

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

解答:作为参数的集合仅适用于像" :name" 这样的命名参数,而不适用于像" ?" 这样的JDBC样式参数.

jpk*_*ing 151

你在使用Hibernate的Query对象,还是JPA?对于JPA,它应该工作正常:

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

对于Hibernate,您需要使用setParameterList:

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

  • 您可以将其转换为列表:`List&lt;String&gt; list = Arrays.asList(yourArray);` (2认同)

mic*_*man 21

在HQL中,您可以使用查询参数并使用setParameterList方法设置Collection.

    Query q = session.createQuery("SELECT entity FROM Entity entity WHERE name IN (:names)");
    q.setParameterList("names", names);
Run Code Online (Sandbox Code Playgroud)


Ste*_*gin 5

现在至少不使用括号,而仅调用“ setParameter”即可与Hibernate一起使用。

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