2010-02-05 3 views
21

Criteria API를 사용하여 두 테이블간에 LEFT OUTER JOIN을 수행하려고합니다.(Lazy) LEFT OUTER JOIN (최대 절전 기준 API 사용)

Criteria criteria = this.crudService 
      .initializeCriteria(Applicant.class) 
      .setFetchMode("products", FetchMode.JOIN) 
      .createAlias("products", "product"); 

그러나,이 내부 조인을 수행 중 또는 오른쪽 외부 그것 때문에 반환 결과의 수, 가입 : 나는 최대 절전 모드 문서에서 찾을 수있는 모든이 방법이다.

또한 내 참여가 게으르길 원합니다. 어떻게해야합니까?

건배!

업데이트 : 별칭을 사용하면 INNER JOIN이 자동으로 결합 된 것처럼 보입니다. 내가 아직 파악하지 못한 "배경 이야기"에는 뭔가가 있습니다. 오늘 별칭이 없습니다. 두 테이블 모두에 열 (또는 더 적절할 경우 속성)이 있으므로 '이름이'이므로 두 테이블에 제한을 적용하는 문제가 있습니다.

+2

이미 답을 수락합니다. –

+0

Hibernate에서 createAlia()에 대한 참조가 기본적으로 INNER JOIN을 생성한다는 것을 알고 싶습니다. API를 검색하여 볼 수 없습니다. 감사. – FaithReaper

답변

0

조인이 SQL 요청에 있습니다. 게으름은 아닙니다.


Hibernate에서는이 데이터를 느리게 검색하기 위해 HQL 요청에서 제외합니다. 그런 다음 엔티티의 getter에 액세스하면 (세션이 아직 열려있는 경우) 요청이 자동으로로드됩니다 (요청의 해당 부분을 쓸 필요가 없음). 당신이 제품의 테이블에 가입 왼쪽해야하는 경우

+0

미안, 나는 이것을 얻지 못했다. 아마도 나는 다시 말해야한다 : LEFT OUTER JOIN을 원하지만 필요한 경우에만 데이터를 실제로 검색하려고한다 (적절한 getter가 호출된다). 게으름 (또는 열망)은 SQL JOIN 유형과 관련이 있습니다. –

+0

Lazyness는 객체로 구현할 수 있지만 SQL 요청으로 구현하지는 못합니다. 요청은 한 번 완전히 실행됩니다. 요청의 일부가 나중에 실행되도록 설계되지 않았습니다! – KLE

+0

HQL에서 LEFT OUTER JOIN FETCH를 작성합니다. 그래서, 아마도 HQL 쿼리는 필요할 때마다 실행되는 많은 SQL 쿼리와 일치합니까? 어쨌든, 느슨하게 또는 그렇지 않은데 어떻게 LEFT OUTER JOIN을 할 수 있습니까? 그리고 HQL에서는 Criteria API를 사용하지 않습니다. 건배! –

34

만 수행

..... CREATEALIAS ("제품", "제품", Criteria.LEFT_JOIN을);

+0

정말 간단하고 도움이됩니다. 감사합니다. – Sllouyssgort

+1

Ankit의 대답 – jlars62

20

Sdavids 응답의 API는 현재 deprecated입니다. 그것의 업데이트 된 버전

.... CREATEALIAS ("직원", "EMP"JoinType.LEFT_OUTER_JOIN)

+0

감사합니다. 사용 중지 된 API 사용을 제거하는 데 도움이됩니다. –

관련 문제