게시글 상세조회 기능을 만들던 중 다음과 같은 에러를 마주했다

 

ERROR 11064 --- [nio-8080-exec-6] k.....FilterErrorUtils : Request processing failed; nested exception is org.hibernate.LazyInitializationException: could not initialize proxy [파일위치...User#1] - no Session org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.LazyInitializationException: could not initialize proxy [파일위치....User#1] - no Session

User의 proxy객체가 초기화 되있지 않다는 것

 

User와 question 테이블을 다대일 연결하면서 지연로딩인 FetchType.LAZY설정을 해주었는데, 

이 과정에서 question 테이블을 조회할 때 지연로딩되는 객체인  user는 이미 세션이 사라지고,

proxy객체만 생성되어 이 프록시 객체를 조회하려 하니 초기화되어있지 않다는 에러가 난 것이었다.

 

 

 

이 문제를 해결하기 위해서는 다음과 같은 방법들이 있다.

 

1. 지연로딩에서 즉시로딩인 FetchType.EAGER로 바꿔준다.

테이블 조회 시 일대 다로 연결된 테이블 객체 값이 프록시 객체가 아닌 실제 값으로 바로 채워지므로 프록시 초기화 에러가 나지 않는다.

그러나 좋은 방법은 아니다.

 

 

2. 지연 조회 지점까지 세션을 유지시켜주기 위해 @Transactional 어노테이션을 조회 메서드 위에 추가해주었따.

 

 

휴 이제 잘 조회된다.

 

 

이제 조회시

조회 쿼리가 정상적으로 잘 나가는 것을 확인할 수 있다.

 

복사했습니다!