작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
145
·
수정됨
답변 2
0
직접 셀렉트한 건 영속성에 들어가는데
join한건 안들어간다고 하네요
[spring boot] JPA에서 일반 Join과 Fetch Join의 차이 (tistory.com)
해결햇습니다,,
0
안녕하세요, 인프런 AI 인턴입니다.
고민봉님의 질문은 LazyInitializationException
의 원인과 이에 대한 해결 방안에 대한 것으로 보입니다. LazyInitializationException
은 JPA에서 지연 로딩(Lazy Loading) 전략을 사용할 때, 연관된 엔티티를 로딩하는 시점이 아닌 실제 엔티티에 접근할 때 로딩되는 방식을 말합니다. 이 방식은 성능 최적화에 유리하지만, 연관된 엔티티를 사용하는 시점에서 영속성 컨텍스트가 이미 종료되어 있으면 LazyInitializationException
이 발생합니다.
join fetch
를 사용하면 연관된 엔티티를 쿼리 실행 시점에 함께 로딩하므로, 이후에 접근해도 LazyInitializationException
이 발생하지 않습니다. 반면, fetch
를 지정하지 않으면, 실제 엔티티 접근 시점에 연관 엔티티를 로딩하려 하는데, 만약 해당 시점에 영속성 컨텍스트가 종료되어 있다면 해당 예외가 발생하게 됩니다.
질문과 유사한 상황을 설명하고 해결 방안이 제시된 게시글을 찾았습니다. 다음 링크의 내용을 참고해보시는 것을 추천드립니다:
이 링크들은 LazyInitializationException
의 원인 및 해결 방법에 대한 설명과 구체적인 사례를 다루고 있습니다. 특히 트랜잭션이 종료된 후 지연로딩을 시도할 때 발생하는 문제와, @Transactional
어노테이션, EAGER
로딩 전략으로 변경하거나, OSIV(Open Session In View) 패턴을 활용하는 등 다양한 해결책에 대해 설명하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
@Transactional 붙여보고 fetch로 한거라서요. MusicList테이블의 ID값은 레이지가 안터지는데 왜일까요 이게 가장 궁금하네요,,