Bitaholic

Hibernate의 HQL에서 limit 적용 본문

Computer/HIbernate

Hibernate의 HQL에서 limit 적용

Bitaholic 2009. 10. 16. 10:45
HQL 의 limit

Hibernate의 HQL 문법은 sql의 limit 가 지원하지 않는다.
limit를 써 쿼리 결과 갯수를 제한 하고 싶으면, Query 클래스의 setMaxResults(int max) 메소드를 이용하면 된다.

 결과를 5개 이하로 제한하고 싶으면 아래와 같이 하면된다.
Query query = session.createQuery("from BookTable order by book_id asc");
query.setMaxResults(5);

 또한 특정 행부터 시작하고 싶으면 (14행 부터 5개)
Query query = session.createQuery("from BookTable order by book_id asc");
query.setFirstResult(14);
query.setMaxResults(5);


Spring & Hibernate

Spring과 Hibernate를 연동했을 때 는 HibernateDaoSupport를 상속하여 객체를 만들어서 주로 쓰는데
이때 Query를 만들지 않고 getHibernateTemplate().fine(String query) 메소드를 쓸 수 있다.
이때 getHibernateTemplate().setMaxResults(int) 라는 Query의 메소드와 동일한 메소드가 있다. 하지만 이 객체는 공유가 되서 다음 쿼리 때도 그 값이 쓰인다. 따라서 쓰기전에 '0'으로 초기화 하고 쓰는게 좋다.

if(limit > 0) {
    getHibernateTemplate().setMaxResults(limit-1);
 } else {
    getHibernateTemplate().setMaxResults(0);
 }

또한 MaxResult에서 정해준 값보다 1개가 더 나와서 위의 코드는 1을 빼주었다. Qeury클래스에도 그런진 확인을 못했다.

Comments