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

2022-08-31 11:50:42

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

SELECT entity FROM Entity entity WHERE name IN (?)

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

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

这有可能吗?

:作为参数的集合仅适用于 “” 等命名参数,而不适用于 JDBC 样式参数 (如 “”。:name?


答案 1

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

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);

答案 2

在 HQL 中,您可以使用查询参数并设置使用 setParameterList 方法收集。

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

推荐