나는 다른 엔티티로부터 3 개의 엔티티를 상속 받았다. 내가 일예 Single_Table 전략하이버 네이트는 단일 상속을 위해 FetchType을 무시한다.
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
을 사용하고 클래스 B, C 및 D가 A에서 상속
엔티티 B에서 다른 엔티티 X를 열심히로드하고 있습니다. 불행하게도, Hibernate는 내 주석을 무시하고 엔티티 X.를 가져 오기 위해 각 엔티티 B에 대한 선택을 만듭니다
@ManyToOne(fetch=FetchType.EAGER)
private Projekt projekt;
다음과 같이 내 선택 문이 보인다, • A '
좀 더 코드 예제에서 'select A를 :
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DType", discriminatorType = DiscriminatorType.STRING, length = 3)
public abstract class A {}
@Entity
@DiscriminatorValue(B.PREFIX)
public class B extends A {
@ManyToOne(fetch=FetchType.EAGER)
private Projekt projekt;
}
이제 Hibernate가 A에서 상속 한 모든 클래스를 쿼리 할 것으로 기대합니다. 불행히도 각 결과 행에 대해 select 문을 실행하여 "projekt"를 쿼리합니다.이 프로 시저는 피하고 싶습니다.
당신의 선택 문이 :
join
당신이, 내가이 관계되지 않은 다른 서브 클래스에 존재 않는다는 사실에도 불구하고InheritanceType.SINGLE_TABLE
문제를 만들지 않습니다 추측 명시 적으로left join fetch
을 지정할 필요가 삽입하기 위해유효하지 않은 JPQL. "Select a from a a"가 아닐까요? 만약 Hibernate가 각각의 B에 대해 X를 가져 오기 위해 select를 생성한다면, 당신의 주석을 무시하지 않는다 : X는 열심히 가져온다. –
고마워, 나는 예제를 바꿨다. 나는 그것을 가능한 한 쉽게 만들려고 노력했다. – Daniel