인프런 커뮤니티 질문&답변

이하진님의 프로필 이미지
이하진

작성한 질문수

실전! Querydsl

컬렉션 엔티티 Lazy 초기화 질문드립니다.

해결된 질문

작성

·

209

·

수정됨

0

안녕하세요. 서비스에서 select 해온 Entity에 toMany 연관관계 필드를 초기화 하는 부분에 대해 궁금해 질문드립니다.

class AEntity{

   @Id
   private Long id;

   @OneToMany(mappedBy=aEntity)
   private List<BEntity> bEntitise = new ArrayList<>():
}
class BEntity{

   @Id
   private Long id;

   @ManyToOne(fetch = FetchType.Lazy)
   @JoinColumn(name="a_id")
   private AEntity aEntity;
}

이렇게 서로 양방향인 엔티티가 있다고 했을 때

class AService{
  
  public AEntity findEntity(Long id){
     AEntity findEntity = aRepository.findById(id).get();
     
     //findEntity의 BEntityList를 lazy 초기화 하기 위한 코드
     findEntity.getBEntities().size();

     return findEntity;
  }
}

서비스에서 엔티티를 찾아 컨트롤러로 리턴해주어 컨트롤러에서 dto로 변환 후, Body에 담아 보여주고 있습니다.

그런데 findEntity의 BEntities 필드를 서비스에서 초기화 시켜준 후 컨트롤러에서 DTO로 변환해야 LazyInitializationException이 발생하지 않아서 findEntity.getBEntities().size();이렇게 초기화를 해주는 코드를 작성하였는데

해당 코드가 뜬금없이 들어가 있는 느낌이라 보통 컬렉션 Lazy 엔티티를 초기화할 때 저렇게 사용해도 되는지 궁금해서 질문드립니다.(fetch 조인은 사용하지 않는다는 가정입니다.)

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 이하진님

다음 강의를 복습해주세요^^

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

감사합니다.

이하진님의 프로필 이미지
이하진

작성한 질문수

질문하기