2012-08-17 3 views
1

최대 절전 모드 쿼리를 사용하여 컬렉션의 일부만 가져 오려고합니다. 예를 들어 여러 개의 Student 객체가 포함 된 Class 객체가 있다고 가정 해 보겠습니다. 이제는 클래스 목록을 얻고 싶지만 단 하나의 데이터베이스 쿼리만으로도 독일어 학생 만 학생 컬렉션에 가져와야합니다. 나머지는 필요하지 않으며 엄청난 오버 헤드가됩니다. 최대 절전 모드 (전 3.6.4 이전에 생각)는이 같은 필터링 createCriteria를 사용하여 수행 할 수의 이후 버전에서Hibernate : 콜렉션의 부분 페칭?

:

criteria.createCriteria("students", "studentscollection", Criteria.LEFT_JOIN, 
    Restrictions.eq("studentscollection.country", "DE")); 

문제는 최대 절전 모드의 현재 버전이 컬렉션이 초기화되지 않은 잎이다 대량의 데이터베이스 쿼리를 트리거하여 액세스 할 때 모든 컬렉션에 대해 전체 컬렉션을로드합니다. 이것은 하나가 아닌 수백 개의 쿼리를 발생시키는 막대한 성능 문제입니다.

하나의 쿼리를 사용하여 현재 최대 절전 모드 버전에 대한 해결책이 있습니까?

답변

0

낮은 버전의 최대 절전 모드를 유지하는 것이 좋습니다. 최근 우리 팀에서도 비슷한 딜레마를 겪었습니다. 지금까지 비슷한 4.0.1 버전의 구조를 사용했으며 여러 쿼리/효율성 문제는 기억하지 않는다는 것을 기억합니다. 그러나 버전 3.6.4의 동작이 바뀔 수 있다는 것이 옳습니다 (https://hibernate.onjira.com/browse/HHH-2049?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel). 이에 대한 대답을 찾으면 여기에서 알려주십시오.

인사말,

루카스

+0

지금까지 내가 3.6.4 – Werzi2001

+0

예 내가이 변경 의도 된 생각의 모든 이후 버전 등을 알 수있다. 나는 이미 jira 항목 HHH-2049에 주석을 달고 최대 절전 모드로 전환하라는 깃발을달라고 요청했다. 실제로 나는 오래된 동작을 원하지만 구현 될 것이라고는 생각하지 않는다. 오래 동안 절전 모드 버전을 유지하는 것은 긴 시야에서 실제로 옵션이 아닙니다 ... – Werzi2001