一尘不染

HQL或Java持久性查询语言中的条款

hibernate

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

SELECT entity FROM Entity entity WHERE name IN (?)

我想将参数作为ArrayList 传递,这可能吗?hibernate电流告诉我,

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

这有可能吗?

解答 :集合作为参数只能与“ :name” 这样的命名参数一起使用,而不能与“ ”这样的JDBC样式参数一起使用?


阅读 223

收藏
2020-06-20

共1个答案

一尘不染

您正在使用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);
2020-06-20