본문 바로가기

프로그래머로 살아가기/ORM

[Hibernate] Criteria를 이용하여 Sorting하기


Hibernate의 Criteria를 이용하여 프로그래밍시에

Entity class가 다른 entity를 참조하고 있을 경우에 Sort Ordering을 하기 위하여서는 다음과 같이 해줘야 합니다.


예를 들어서 다음과 같은 코드가 있다고 한다면...

Class A  {
   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"));


실제는 아래와 같이 해줘야 합니다.

Criteria fooCriteria = session.createCriteria(A.class);
fooCriteria.createAlias("otherObject", "otherObjectAlias");
fooCriteria.addOrder(Order.asc("otherObjectAlias.name"));

이런식으로 하는 이유는 inner Join을 발생시켜야 name에 대한 ordering이 가능해지기 때문입니다.