반응형
HQL 또는 Java Persistence Query Language의 IN 절
다음과 같은 매개 변수화 된 JPA 또는 Hibernate 쿼리가 있습니다.
SELECT entity FROM Entity entity WHERE name IN (?)
매개 변수를 ArrayList <String>으로 전달하고 싶습니다. 가능합니까? Hibernate Current는
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);
Hibernate 5.0.2.Final 과 함께 순수 JPA를 실제 공급자로 사용하면 다음과 같은 위치 매개 변수도 작동하는 것 같습니다.
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"}); 내 문제를 해결
참고 URL : https://stackoverflow.com/questions/4828049/in-clause-in-hql-or-java-persistence-query-language
반응형
'IT TIP' 카테고리의 다른 글
stdout에서 스프링 부트 로고를 비활성화하는 방법은 무엇입니까? (0) | 2020.10.20 |
---|---|
PHP에 대한 "고급"지식을 향상시키는 방법은 무엇입니까? (0) | 2020.10.20 |
Express.js 라우팅 : 선택적 slpat 매개 변수? (0) | 2020.10.20 |
GitHub SSH 키의 암호를 재설정하거나 변경하는 방법은 무엇입니까? (0) | 2020.10.20 |
여러 줄 텍스트 상자에 maxlength 지정 (0) | 2020.10.20 |