HQL或Java持久性查询语言中的IN子句
我有以下参数化的JPA或Hibernate查询:
SELECT entity FROM Entity entity WHERE name IN (?) 我想要传递参数作为ArrayList <String>,这可能吗? hibernate电stream告诉我,那
 java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String 
这可能吗?
  解答 :作为参数的集合只能使用像“ :name ”这样的命名参数,而不能使用像“ ? ”这样的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); 
在HQL中,您可以使用查询参数并使用setParameterList方法设置Collection。
  Query q = session.createQuery("SELECT entity FROM Entity entity WHERE name IN (:names)"); q.setParameterList("names", names); 
留下括号并简单地调用“setParameter”现在至less可以与Hibernate一起工作。
 String jpql = "from A where name in :names"; Query q = em.createQuery(jpql); q.setParameter("names", l); 
使用纯粹的JPA与Hibernate 5.0.2.Final作为实际的提供者,以下内容似乎也适用于位置参数:
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; } }