반응형
Criteria API를 사용하여 주문
HQL 쿼리를 작성할 때
Query q = session.createQuery("SELECT cat from Cat as cat ORDER BY cat.mother.kind.value");
return q.list();
모든 것이 좋습니다. 하지만 기준을 작성할 때
Criteria c = session.createCriteria(Cat.class);
c.addOrder(Order.asc("mother.kind.value"));
return c.list();
나는 예외를 얻는다 org.hibernate.QueryException: could not resolve property: kind.value of: my.sample.data.entities.Cat
기준 및 주문을 사용하려면 "주문 기준"을 어떻게 표시해야합니까?
에 대한 별칭을 만들어야합니다 mother.kind. 당신은 이렇게합니다.
Criteria c = session.createCriteria(Cat.class);
c.createAlias("mother.kind", "motherKind");
c.addOrder(Order.asc("motherKind.value"));
return c.list();
매핑을 보지 않고 확실히 알기는 어렵지만 (@Juha의 의견 참조) 다음과 같은 것을 원한다고 생각합니다.
Criteria c = session.createCriteria(Cat.class);
Criteria c2 = c.createCriteria("mother");
Criteria c3 = c2.createCriteria("kind");
c3.addOrder(Order.asc("value"));
return c.list();
조인 유형도 추가 할 수 있습니다.
Criteria c2 = c.createCriteria("mother", "mother", CriteriaSpecification.LEFT_JOIN);
Criteria c3 = c2.createCriteria("kind", "kind", CriteriaSpecification.LEFT_JOIN);
sess.createCriteria가 더 이상 사용되지 않기 때문에 다음 작업을 수행해야합니다.
CriteriaBuilder builder = getSession().getCriteriaBuilder();
CriteriaQuery<User> q = builder.createQuery(User.class);
Root<User> usr = q.from(User.class);
ParameterExpression<String> p = builder.parameter(String.class);
q.select(usr).where(builder.like(usr.get("name"),p))
.orderBy(builder.asc(usr.get("name")));
TypedQuery<User> query = getSession().createQuery(q);
query.setParameter(p, "%" + Main.filterName + "%");
List<User> list = query.getResultList();
Hibernate 5.2 이상의 경우 CriteriaBuilder다음과 같이 사용하십시오.
CriteriaBuilder builder = sessionFactory.getCriteriaBuilder();
CriteriaQuery<Cat> query = builder.createQuery(Cat.class);
Root<Cat> rootCat = query.from(Cat.class);
Join<Cat,Mother> joinMother = rootCat.join("mother"); // <-attribute name
Join<Mother,Kind> joinMotherKind = joinMother.join("kind");
query.select(rootCat).orderBy(builder.asc(joinMotherKind.get("value")));
Query<Cat> q = sessionFactory.getCurrentSession().createQuery(query);
List<Cat> cats = q.getResultList();
참고 URL : https://stackoverflow.com/questions/1780129/order-by-using-criteria-api
반응형
'IT TIP' 카테고리의 다른 글
| 가변 높이 UITableView 내에서 콘텐츠를 기반으로 UIWebView 높이를 결정하는 방법은 무엇입니까? (0) | 2020.11.04 |
|---|---|
| 데코레이터보다 책임 체인을 사용하는 이유는 무엇입니까? (0) | 2020.11.04 |
| WCF 오류 "HTTP.SYS를 사용하여 HTTPS의 경우 서버 인증서가 제대로 구성되지 않았기 때문일 수 있습니다." (0) | 2020.11.04 |
| python 스크립트에서 tar 파일 내용을 압축 해제하지 않고 읽기 (0) | 2020.11.04 |
| TortoiseSVN의 Windows 탐색기 아이콘이 상태를 수정하기 위해 새로 고치는 데 오랜 시간이 걸립니다. (0) | 2020.11.04 |