일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- WebService
- Linux
- Mac
- WebLogic
- spring3.0
- Java5
- 중고
- ThinkFree
- 요리
- 행복이
- PSP
- 부동산
- 이승철
- Spring
- Eclipse
- 효민이
- Swing
- Java
- Vista
- 독서
- 육아
- OS
- Programing
- 판매
- Ant
- 미국드라마
- 책
- php
- db
- Programming
Archives
- Today
- Total
Bitaholic
Hibernate의 HQL에서 limit 적용 본문
HQL 의 limit
Hibernate의 HQL 문법은 sql의 limit 가 지원하지 않는다.
limit를 써 쿼리 결과 갯수를 제한 하고 싶으면, Query 클래스의 setMaxResults(int max) 메소드를 이용하면 된다.
결과를 5개 이하로 제한하고 싶으면 아래와 같이 하면된다.
또한 특정 행부터 시작하고 싶으면 (14행 부터 5개)
Spring & Hibernate
Spring과 Hibernate를 연동했을 때 는 HibernateDaoSupport를 상속하여 객체를 만들어서 주로 쓰는데
이때 Query를 만들지 않고 getHibernateTemplate().fine(String query) 메소드를 쓸 수 있다.
이때 getHibernateTemplate().setMaxResults(int) 라는 Query의 메소드와 동일한 메소드가 있다. 하지만 이 객체는 공유가 되서 다음 쿼리 때도 그 값이 쓰인다. 따라서 쓰기전에 '0'으로 초기화 하고 쓰는게 좋다.
또한 MaxResult에서 정해준 값보다 1개가 더 나와서 위의 코드는 1을 빼주었다. Qeury클래스에도 그런진 확인을 못했다.
Hibernate의 HQL 문법은 sql의 limit 가 지원하지 않는다.
limit를 써 쿼리 결과 갯수를 제한 하고 싶으면, Query 클래스의 setMaxResults(int max) 메소드를 이용하면 된다.
결과를 5개 이하로 제한하고 싶으면 아래와 같이 하면된다.
Query query = session.createQuery("from BookTable order by book_id asc");
query.setMaxResults(5);
query.setMaxResults(5);
또한 특정 행부터 시작하고 싶으면 (14행 부터 5개)
Query query = session.createQuery("from BookTable order by book_id asc");
query.setFirstResult(14);
query.setMaxResults(5);
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);
}
getHibernateTemplate().setMaxResults(limit-1);
} else {
getHibernateTemplate().setMaxResults(0);
}
또한 MaxResult에서 정해준 값보다 1개가 더 나와서 위의 코드는 1을 빼주었다. Qeury클래스에도 그런진 확인을 못했다.
Comments