[英]IN-clause in HQL or Java Persistence Query Language
我有以下參數化的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
這有可能嗎?
解答 :作為參數的集合僅可用於諸如“ :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”即可與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;
}
}
query.setParameterList(“ name”,new String [] {“ Ron”,“ Som”,“ Roxi”})); 解決了我的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.