2009-09-03 6 views

답변

6

사실, 그 반대의 경우입니다. 매핑에서이 기능을 해제하고 쿼리에서 "가져 오기"를 사용하여 특정 유스 케이스에서 활성화하십시오.

그것은 Hibernate 팀이 보는 방식입니다. Hibernate는 프로퍼티에 대해 "no-fetch"를 지정하는 요청을 생성 할 방법이 없다 ...

+0

그게 제가 생각한 것입니다. 그렇게 할 수있는 방법이 있다면 내 운을 시험해보고있었습니다. 감사합니다 –

+0

대단히 반갑습니다. 질문에 대한 답을 생각할 필요가있는 다른 것이 있습니까? 나는 대답을 받아 들인다. – KLE

0

나는 역사적인 이유로 몇 가지 일대 다 의존 관계를 열망했다. 수년에 걸쳐 많은 장소가 그것에 의존하게되었으므로 꺼지기가 어려웠습니다. 그러나 어떤 경우에는 열성적인 가져 오기가 어려워졌습니다. 테이블에서 더 큰 선택을 할 때마다 각 개체의 컬렉션 각각에 대해 100 개의 작은 하위 쿼리가 생성됩니다. 열심히 가져 오기를 실제로 덮어 쓰지 않고이 문제를 해결할 수있는 방법을 찾았습니다. 단지 유용하게 사용할 수 있습니다. 한 번에 모든 서브 페치를 수행하는 단일 쿼리를 작성하기 만하면됩니다. 이것은 하이버 네이트가 의존성 그래프를 걷고 100 개의 쿼리를 생성하는 대신 데이터베이스에 1 개의 물리적 쿼리를 만듭니다.

그래서 내가

Query q = session.createQuery("from Customer c " + 
      "left join fetch c.vats v " + 
      "left join fetch v.klMemos bk " + 
      "left join fetch bk.ferryKlMemos"); 

한 고객이 많은 VAT 번호로

Query q = session.createQuery("from Customer c"); 

교체, 1 VAT 번호 등등 많은 klmemos하고 있습니다. 이전 상황에서는 먼저 고객 만 가져오고 최대 절전 모드에서는 종속 컬렉션 각각을 하나씩 가져 오기 시작합니다. 두 번째 폼은 모든 것을 하나의 네이티브 질의로로드 할 것이고, hibernate는 객체 캐시에 열망하는 콜렉션을 채우는 데 필요한 모든 것을 찾을 것이다. 누군가가 도움이되기를 바랍니다. 참고 : 여전히 열정적 인 페치를 피하려고 노력해야한다고 생각합니다 .-)