인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

최강개발자님의 프로필 이미지
최강개발자

작성한 질문수

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

회원 조회 API

Could not write JSON: failed to lazily initialize a collection of role

작성

·

2.3K

1

안녕하세요. 질문드립니다.

원인과 해결방법은 알지만 왜 그럴까라는건 짐작이 안가서 질문드립니다.

일단 에러 내용입니다..

{
"timestamp": "2021-08-16T04:43:26.660+00:00",
"status": 500,
"error": "Internal Server Error",
"trace": "org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: failed to lazily initialize a collection of role: jpabook.jpashop.domain.Member.orders, could not initialize proxy - no Session; nested exception is com.fasterxml.ja
뒤에 내용이 더 있지만 쓸모없는 내요인거 같아서 뺐습니다.
막상 검색해보니 이런 에러이고, 이분은
https://ankonichijyou.tistory.com/entry/JPA-OneToMany-%EC%98%A4%EB%A5%98
FetchType.EAGER
이렇게 적용해서 해당 에러를 푸셨다고 하셨습니다.
결론적으론 order라는 값이 빈값이라 에러가 났던 원인이었고,
강의해서 사용하신 @JsonIgnore 라는 값을 이용해서 Member 엔티티 Order 쪽에
넣으면 에러가 사라지긴합니다만
oneToMany 디폴트가 지연로딩인데.. 즉시로딩으로 바꾸니까 에러가 사라지는데.. 강의에선 무조건 지연로딩으로 잡고 시작하라고 하셔서 어떤걸 선택할지 애매합니다..
1. 즉시로딩을 선택해야되는지..?
2. 이그놀로 처리..? 근데 추후 유지보수가 힘들꺼같다
3. dto로 처리

답변 1

0

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

안녕하세요. ohjinseok님

결론은 모두 지연로딩을 사용해야 합니다.

자세한 내용은 다음을 참고해주세요.

https://www.inflearn.com/questions/39516

이번 강의를 끝까지 들어보시면 고민하시는 부분이 자연스럽게 해소되실거에요^^

감사합니다.

최강개발자님의 프로필 이미지
최강개발자

작성한 질문수

질문하기