게시글 상세조회 기능을 만들던 중 다음과 같은 에러를 마주했다
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 어노테이션을 조회 메서드 위에 추가해주었따.
휴 이제 잘 조회된다.
이제 조회시
조회 쿼리가 정상적으로 잘 나가는 것을 확인할 수 있다.
'Error' 카테고리의 다른 글
[ERROR]Git에서 폰트파일 깨지는 문제 (0) | 2024.05.23 |
---|---|
[ERROR]@Authentication 사용 시 principal is null (1) | 2024.03.26 |
[BigDecimal] java 소숫점 계산 정확하게 하기 (4) | 2023.01.19 |
[IllegalArgumentException] urlTemplate not found (0) | 2023.01.17 |
@MapStruct 이 제대로 작동하지 않는 오류 (0) | 2022.12.11 |