Hibernate의 Criteria를 이용하여 프로그래밍시에
Entity class가 다른 entity를 참조하고 있을 경우에 Sort Ordering을 하기 위하여서는 다음과 같이 해줘야 합니다.
예를 들어서 다음과 같은 코드가 있다고 한다면...
Class A {
String someProperty;
Class B otherObject;
}
Class B {
String name;
}
String someProperty;
Class B otherObject;
}
Class B {
String name;
}
A Entity를 select하여 올때 B Class의 name으로 Sorting을 하고 싶다면...
다음과 같이 하면 될것 같으나 해보면 에러가 발생합니다.
Criteria fooCriteria = session.createCriteria(A.class);
fooCriteria.addOrder(Order.asc("otherObject.name"));
fooCriteria.addOrder(Order.asc("otherObject.name"));
실제는 아래와 같이 해줘야 합니다.
Criteria fooCriteria = session.createCriteria(A.class);
fooCriteria.createAlias("otherObject", "otherObjectAlias");
fooCriteria.addOrder(Order.asc("otherObjectAlias.name"));
fooCriteria.createAlias("otherObject", "otherObjectAlias");
fooCriteria.addOrder(Order.asc("otherObjectAlias.name"));
이런식으로 하는 이유는 inner Join을 발생시켜야 name에 대한 ordering이 가능해지기 때문입니다.