두 가지 옵션이있다 : 매핑이나 커스텀 OrderBy 객체가있다.
1) 매핑 : 이제
<property name="total" formula="(sub1 + sub2)" insert="false" udpate="false" />
, 우리는이 값을 사용하여 다음 Total
자주 사용되는 경우에, 당신은 계산/읽기 전용 특성 (누르라 5.1.11. Property를) 엔터티 매핑을 확장하고 만들 수 있습니다 쉽게 주문 (및 어디서나) :
Criteria criteria = session.createCriteria(MyClass.class);
...
criteria.addOrder(Order.asc("total"));
2) 우리는 여전히 OOP 세계에 있습니다. criteria.addOrder()
작업에는 Order
개체 인스턴스가 필요합니다. 그래서 우리는 Custom one : 'MyOrder'를 전달할 수 있습니다.
:이 방법에 의해 ORDER으로 이제
public class MyOrder extends Order {
public MyOrder(String propertyName, boolean ascending) {
super(propertyName, ascending);
}
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) {
StringBuilder fragment = new StringBuilder();
fragment.append(propertyName);
fragment.append(ascending ? " asc" : " desc");
return fragment.toString();
}
}
, 우리는 어떤 (유효) SQL 스크립트를 삽입 할 수 있습니다 우리의 경우, 개체가 어떤 유효한 SQL 문을 받아들이고 직접 BY ORDER으로 그것을 주입 될 수있다
Criteria criteria = session.createCriteria(MyClass.class);
...
criteria.addOrder(new MyOrder("(sub1 + sub2)", true));
mytable이 엔티티의 클래스 이름이라고 가정 할 때, 이것은 유효한 HQL입니다. –