해결된 질문
작성
·
254
0
@Table(name = "a")
@Entity
@Getter
public class AEntity {
@Id
@Column(name = "a_id")
private Long aId;
@OneToMany(mappedBy = "aEntity")
List<BEntity> bList;
public void initializeClist() {
bList.stream().map(BEntity::getCList).forEach(Hibernate::initialize);
}
}
@Table(name = "b")
@Entity
@Getter
public class BEntity {
@Id
@Column(name = "b_id")
private Long bId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id")
private AEntity aEntity;
@OneToMany(mappedBy = "bEntity")
List<CEntity> cList;
}
@Table(name = "c")
@Entity
@Getter
public class CEntity {
@Id
@Column(name = "c_id")
private Long cId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "b_id")
private BEntity bEntity;
}
안녕하세요. 수업을 아직 수강중인 학생입니다.
위와같이 A -> B -> C 아래로 OneToMany 관계로 LeftJoin을 해야한다고 하면
어떤식으로 코드를 짜야하는 걸까요?
displayRwdbJpaQueryFactory
.selectFrom(QAEntity.aEntity)
.leftJoin(QAEntity.aEntity.bList, QBEntity.bEntity)
.fetchJoin().fetch();
.fetchJoin을 써봤는데.. 한번은 되는데 두번은 안되더라구요..
bList.stream().map(BEntity::getCList).forEach(Hibernate::initialize);
@BatchSize 주고 위처럼 initialize 해봤는데..
테이블 계층구조가 여기서 끝나는게 아니라서.. 이런식으로 처리 되기에는 조금 무리가 있을것 같습니다.
장고끝에 조언을 구합니다.. 도와주세요.. ㅠㅠ
답변 1
1
안녕하세요. 디카페인빌런님
이 문제를 해결하는 다양한 방법들이 있는데요.
결론부터 말씀드리면 fetch join은 하나만 적용할 수 있습니다.
그리고 나머지는 batch size, 또는 dto로 조회후 조립하는 방법등을 사용해야 합니다.
관련해서 다음 강의에서 해당 내용을 자세히 다루니 강의 내용을 참고해주세요.
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
감사합니다.