쿼리 중 하나에 중복 된 데이터를 얻을 수 많은 관계를 최대 절전 모드, 수는 @Fetch와 반복 멀티 데이터 솔루션의 수 (FetchMode.SUBSELECT)입니다

데이터 테이블에서 첫번째보기

만 두 섹션 테이블 데이터

열 아래 플레이트 (1) 추천, 자식 없습니다

14 개의 서브 - 부분 아래 제 2

쿼리 한 끝에, 결과는 16이

즉 1+ 2+ 포럼 2 항과 그의 14 개 집합이 나열되어 판이다, 이것은 분명히 잘못된 것입니다

 

플레이트 구성 개체

    @OneToMany (캐스케이드 = {} = FetchType.EAGER가 FETCH에 CascadeType.ALL) 
    @JoinColumn을 (NAME = "sectionId") // 협회 컬럼 모델에 외부 키

 나는 발생하는 긴급 부하가 무엇인지 추측

찰스 문이 필요합니다

절전 : 
     선택 
        this_.id id1_17_1_,
        .... 에서 
        this_ t_section 
     외측을  가입 
        t_column columnmode2_ 
             this_.id = columnmode2_.sectionId 
하이버 네이트 : 
    선택 
        columnmode0_.id 같이 
       , id1_7_ .... 에서 
        t_column의 columnmode0_ 
    여기서 
        columnmode0_.sectionid = ' 1 '

 

 

이 정책은 삭제하도록 구성되어

@OneToMany (캐스케이드 = {}에서 CascadeType.ALL ) 
    @JoinColumn (이름 = "sectionId") // 협회 컬럼 모델에 외부 키

 

또는 지연로드를 사용하여

@OneToMany (캐스케이드 = {}에서 CascadeType.ALL = FETCH FetchType.LAZY에) 
    @JoinColumn를 (이름 = "sectionId") // 협회 컬럼 모델에 외부 키

 

당신은 중복 된 데이터 세트의이 문제를 해결할 수

그러나,이 멀티 파티의 컬렉션을 취득하지 않은

문제는 다음과 같습니다 해결되지 않습니다

문의 후 즉, @Fetch를 사용하여이 문제를 해결할 수

@OneToMany (캐스케이드 = {} CascadeType.ALL)에 
    @JoinColumn (이름 = "sectionId") // 컬럼 모델 연관 외래 키 
    @Fetch (FetchMode.SUBSELECT)

 발행 콘솔에서 쿼리는 두 가지입니다

최대 절전 모드 : 
     선택 
        this_.id id1_17_0_,
        ..... 에서 
        t_section this_ 
: 최대 절전 모드 
    를 선택 
        columnmode0_.id 
       , id1_7_ .... 에서 
        t_column의 columnmode0_ 
    
        columnmode0_.sectionid = ' 1 '

다음 노트 경우와하면 변경

 @OneToMany ( 캐스케이드  = {CascadeType의이. ALL } FETCH  = FetchType.EAGER)
     @JoinColumn를 (이름 = "sectionId") // 외래 키 컬럼 모델이 연관된다
     @Fetch (FetchMode.SUBSELECT)를

문은 다시 변경 

절전 : 
     선택 
        this_.id id1_17_0_,
       .... 에서 
        t_section this_ 
하이버 네이트 : 
    선택 
        columnmode0_.sectionId 같은 sectionI7_17_1_,
        ....를 으로부터 
        t_column의 columnmode0_ 것은 
    어디 
        columnmode0_.sectionId 에서 (
             선택한 
                this_.id 
            에서 
                t_section의 this_ 
        )

 쿼리 효율성으로, 현재 빠른 게으른 부하 확실히로로드되지 급성으로 처리 한 다음 시간 분석기 검사를하지만, 문에서 분석까지, @ (FetchMode.SUBSELECT)를 가져 오기 위해 시간이 없습니다

추천

출처www.cnblogs.com/jnhs/p/11404572.html