Hibernate의 검색 전략에는 클래스 수준 검색 전략과 연관 수준 검색 전략이 포함됩니다.
클래스 수준 검색 전략에는 즉시 검색과 지연 검색이 포함됩니다. 기본 검색 전략은 즉시 검색입니다. Hibernate 매핑 파일에서는
연관 수준 검색 전략에는 즉시 검색, 지연 검색 및 긴급 왼쪽 외부 조인 검색이 포함됩니다. 연관 수준 검색의 경우 일대다 및 다대다, 다대일 및 일대일의 두 가지 상황으로 나눌 수 있습니다.
일대다 및 다대다 관계는 일반적으로
1) 즉시 검색: 이 때 일대다 기본 검색 전략은lazy=false, external-join=false입니다. 쓸모가 없다면 이 검색 방법을 사용하지 마세요.
2) 지연된 검색:lazy=true, external-join=false(outer-join=true는 의미가 없음), 이것이 선호되는 검색 방법입니다.
3) 긴급 왼쪽 외부 조인 검색: 현재 이 검색 전략은 id 기반 검색 방법(load, get)에만 적용 가능하고 쿼리에는 적용되지 않습니다. . 컬렉션 검색(즉시 검색 전략을 사용합니다). 즉시 검색에 비해 이 검색 전략은 하나의 SQL 문을 줄이지만 Hibernate에서는 외부 조인=true로 구성된
다대일 및 일대일 검색 전략은 일반적으로 <다대일> 및 <일대일> 구성을 사용합니다. <다대일>에서 구성해야 할 속성은 외부 조인이고, 한쪽에 연결된 <클래스>의 지연 속성도 구성해야 합니다(<다대일 구성은 게으르지 않습니다). >), they 결합된 검색 전략은 다음과 같습니다:
1) external-join=auto: 기본값이며,lazy=true이면 지연 검색이고,lazy=false이면 긴급 검색입니다. 외부 조인 검색.
2) 외부 조인=true는 지연 여부와 상관없이 긴급 왼쪽 외부 조인 검색입니다.
3) external-join=false,lazy=true이면 지연 검색이고, 그렇지 않으면 즉시 검색입니다.
기본적으로(outer-join=auto,lazy=false) Hibernate는 긴급 왼쪽 외부 조인을 사용하여 연관된 일방 객체를 검색한다는 것을 알 수 있습니다.
내 생각에는 많은 경우 한쪽 끝과 연관된 객체를 로드할 필요가 없습니다(대부분 우리에게 필요한 것은 연관된 객체의 ID뿐입니다). 또한 연관된 객체가 긴급 왼쪽 외부 연결을 사용하는 경우에도 마찬가지입니다. 검색, 선택이 나타납니다. 명령문에 외부 연결 테이블이 여러 개 있으면 검색 성능에 영향을 미치게 됩니다. 이것이 Hibernate가 hibernate.max_fetch_length 속성을 통해 외부 연결의 깊이를 제어하는 이유입니다. 긴급 Left Outer Join 검색의 경우 쿼리의 컬렉션 검색은 적용되지 않으며 즉시 검색 전략을 채택합니다.
검색 전략은 실제 상황에 맞게 선택해야 합니다. 즉시 검색과 지연 검색의 장점은 select 문이 간단하고(테이블당 하나의 문) 쿼리 속도가 빠르다는 것입니다. 단점은 테이블을 연결하는 데 여러 개의 select 문이 필요하므로 데이터베이스 액세스 빈도가 증가한다는 것입니다. . 따라서 즉시 검색과 지연 검색을 선택할 때 일괄 검색 전략을 사용하여 select 문 수를 줄이는 것을 고려할 수 있습니다(batch-size 속성 구성). 왼쪽 외부 조인 검색의 경우 선택 횟수가 적다는 장점이 있지만, 선택 문의 복잡성이 증가하고 여러 테이블 간의 연결 작업에 시간이 많이 걸린다는 단점이 있습니다. 또한 구성 파일은 죽었으나 프로그램은 살아 있으며 필요에 따라 프로그램에 표시되는 검색 전략을 지정할 수 있습니다(프로그램에 표시되는 긴급 왼쪽 외부 연결 검색을 지정해야 하는 경우가 종종 있습니다). 검색 전략 구성에 따른 효과를 확인하려면 프로그램 실행 시 Hibernate가 실행하는 SQL 문을 볼 수 있도록 show_sql 속성을 구성하면 됩니다.