일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- spring3.0
- 독서
- 요리
- 미국드라마
- db
- php
- Ant
- 육아
- PSP
- Mac
- Vista
- Spring
- Swing
- 이승철
- 책
- ThinkFree
- WebLogic
- 효민이
- Eclipse
- Java
- Programing
- WebService
- OS
- 부동산
- 중고
- Programming
- 판매
- Java5
- 행복이
- Linux
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