어디에 있는지 파악할 수 있는 일반 참가 및 페치할 참가하십시오 desktopplatforms 돕는다구요 사용합니다.
예를 들어, 우리는 이 두 쿼리합니다
FROM Employee emp
JOIN emp.department dep
및
FROM Employee emp
JOIN FETCH emp.department dep
그들 사이에 무슨 차이가? 연결되었으면 어느쪽이야 때 사용하는?
이 두 쿼리합니다 참가하십시오 쿼리하려면 사용하고, 모든 직원이 하나 이상 있는 部门是否有人员 연관됨.
하지만 차이는. 첫 번째 쿼리하지 반품하는 경우 해당 직원들이 만든 최대 절전 모드. 모든 부서 직원들이 만든 두 번째 쿼리하지 틀렸다니까 반환 및 관련.
그래서 사용하는 경우, 두 번째 쿼리하지 할 필요가 없습니다 다시 볼 수 있는 새로운 쿼리하지 친 데이터베이스입니까 Departments 각 부하예요.
두 번째 쿼리하지 할 때 사용할 수 있습니다 합니다 미국 각 부하예요. 미 국무부는 않아도 사용할 경우, 첫 번째 질의입니다.
내가 이 링크를 할 경우 일부 적용하십시오 레커먼드 읽을 수 있는 조건 (너희는너희가 필요하게 될 것이다). https://stackoverflow.com/questions/5816417/how-to-properly-express-jpql-join-fetch-with-where-clause-as-jpa-2-criteriaq
[이 링크] 에서 (http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html) 에서 주석문입니다 읽기 전에 언급한 바와 같이, 이 부분은.
>. A " fetch"; 값 또는 컬렉션에 참가하십시오 연관입니다 수 있습니다. >. 초기화되었습니다 부모가 함께 사용하여 객체를 하나 선택. >. 이는 특히 유용한 경우에 뜻한다. It >. 이 선언이 효과적으로 재정의됩니다 외부 조인 및 게으른 >. 더 연관입니다 및 매핑 파일을 컬렉션.
이 " 참가하십시오 FETCH"; # 39 의 효과를 갖게 될 경우 it& (페치할 = 페치티페드라지) 속성을 비디오함의 δ1 (company. 예제에서와 벨로).
단지, 이 경우, 효과 및 방법을 " 쿼리하지 happen" 합니다. 잘 알고 있다 합니다 [이] (http://docs.jboss.org/hibernate/core/4 .0/manual/en-us/html/performance.html # 성능 불러오기):
>. 최대 절전 모드 두 가지 직각 상: 언제, 어떻게 반입됨 협회 >. 그것은 반입됨. 그 혼란을 하지 않는 것이 중요합니다. 우리가 사용하는 >. 위해 페치할 성능을 튜닝합니다. 게으른 정의하십시오 계약을 수 있습니다. >. 어떤 데이터를 항상 사용할 수 있는 특정 믿지아니하며 분리되었는지 인스턴스입니다 >. 클래스.
이 때 > 연관입니다 반입됨 -; 네 " FETCH"; 유형
도대체 어떻게 > 반입됨 -; Join/select/Subselect/Batch
@OneToMany(fetch = FetchType.LAZY)
private Set<Department> department;
사용할 때
FROM Employee emp
JOIN FETCH emp.department dep
'' '와' 왕실드레프 emp 얻을 수 있습니다. 하지만 일부러 때 사용할 수 있습니다 '는 최대 절전 모드' 를 계속 페치할 왕실드레프 프로세싱용으로 데이터베이스입니까 afaq 설정하는 다른 부서의.
그래서 그냥 튜닝, 그 문제에 대한 모든 결과를 가져올 (필요할 때 방관하겠나) 를 하나의 쿼리하지 (열심히 가져오는) 또는 운영까지도 쿼리하려면 rmw 이 필요할 때 (lazy 가져오는).
열심히 할 때 사용할 수 있는 한 작은 데이터 불러오기 선택 (하나의 큰 쿼리별). 게으른 가져오는 너희는너희가 쿼리하려면 rmw (많은 작은 쿼리별) 또는 사용을 한다.
페치할 사용할 때:
너무 긴 시간이 필요한 데이터베이스 서버 및 애플리케이션 서버로 통신을 -
그 때, 할 수 있습니다 - # 39 이 액세스하려면 rmw 취합은 don& 없다 ( 트랜잭션용 바깥쪽인지가 의 방법 / 클래스)
@Onetoone 경우 매핑에서는 페치티페드라지 설정되었습니다 사용하면 쿼리하지 ss+sp (필요하므로 部门是否有人员 객체에는 스크램블된 일부로 로드되었는지 부하예요 객체에는) 는 최대 절전 모드, 어떤 것이라고 할 수 있는 모든 개별 부하예요 객체에는 패치합니다 DB 에서 이 문제를 쿼리합니다 페치할 部门是否有人员 객체에는. 나중에 코드에서 部门是否有人员 객체에는 너회가 액세스할 수 있는 모든 문제를 통해 일정한 部门是否有人员 값이 하나인 연관입니다 및 하이버네이트 않을 객체에 대한 질의를 페치할 部门是否有人员 주어진 부하예요. 이 회사는 직원 수를 최대 절전 모드 여전히 문제 같은 쿼리합니다 너희에게베풀어진 반입됨. 최대 절전 모드 모두에서 실행할 경우 위와 같은 수의 쿼리합니다 쿼리합니다 액세스하려는 部门是否有人员 객체에는 모든 직원의 객체에는
드레이크: # 39 i& 말할 때, m, t # 39 의심하였더라 don& 페치할 사용할 수 있는지 알고, 그 종류는: [] '즉' List<, 개체, 객체 테이블이 아닌 > 바뀌엇어요 목록니다 부하예요.
Object[0] refers an Employee entity
Object[1] refers a Departement entity
페치할 사용할 때, 그 가운데 하나입니다. ',' List< 선택하고 그 결과 목록은 부하예요 Employee> 목록이 있는 데파트 망. 이 선언은 게으른 재정의됩니다 엔티티입니다.