HQL - select 절

Hibernate 2008. 4. 13. 02:07
HQL의 다른 문법들(from, where)에서도 그렇듯이 select절 또한 매우 객체 지향적 입니다.

select 절에 객체의 alias 자체를 지정할 수 있습니다. 다음 두 hql은 동일 합니다.
from Article a
select a from Article a

이런 경우도 동일 합니다.
결과 리스트는 Object 배열로써 게시물과 판매자가 담겨 있겠죠?
from Article a, Seller s where a.writer = s.name
select a, s from Article a, Seller s where a.writer = s.name

원하는 객체만 선택적으로 가져올 수도 있습니다.
결과 리스트는 이제 Object 배열이 아니고 게시물만 담겨 있는 리스트 겠군요...
select a from Article a, Seller s where a.writer = s.name

중복된 객체를 제거하기 위한 방법은 SQL의 distinct를 사용하는 것과 동일 합니다.
결과 리스트에는 중복 없이 500원 이상의 제품만 파는 판매자들이 담겨 있을 것 입니다.
select distinct s from Seller s join s.items i where i.price > 500

객체 대신 특정 프로퍼티들만 지정할 수 있습니다.
결과 리스트에는 두말할 것도 없이 Object 배열이 담겨 있습니다.
select id, title from Article

조회 프로퍼티들에 대해서 alias를 지정할 수 있습니다.
지금의 경우는 별로 의미가 없네요.
select id as id, title as title from Article

생소하지만 이런 기능도 있습니다.
결과 리스트에는 조회 프로퍼티들이 담긴 리스트가 들어 있습니다.
괄호 안에 들어가는건 반드시 프로퍼티만 올 수 있는건 아니고 객체의 alias가 올 수도 있습니다만 그렇게 사용할 이유도 없겠네요...
select new list(id, title) from Article

다른 클래스를 지정할 수도 있습니다.
패키지를 포함한 클래스 명과 구문에서 사용하는것과 동일한 생성자가 있어야 합니다.
이제 결과 리스트에는 ArticleView가 담겨 있을거 같군요.
select new board.view.ArticleView(id, title) from Article

마지막으로 map도 생성 합니다.
위에서 쓸모 없어 보이던 프로퍼티의 alias가 빛을 보이는 순간이군요.
결과 리스트에는 당연히 map이 담겨 있습니다.
select new map(id as id, title as title) from Article


'Hibernate' 카테고리의 다른 글

HQL - 컬렉션 필터  (0) 2008.04.13
HQL - fetch  (0) 2008.04.13
HQL - select 절  (0) 2008.04.13
HQL - join  (0) 2008.04.13
HQL - where 절  (0) 2008.04.13
HQL - 시작, from 절  (0) 2008.04.13
Posted by 째코

댓글을 달아 주세요