org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: could not initialize proxy [kr.co. ... ] - no Session
Caused by: org.hibernate.LazyInitializationException: could not initialize proxy [kr.co. ... ] - no Session
[http-nio-8081-exec-3] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: could not initialize proxy [kr.co. ... ] - no Session]
해당 에러는 JPA를 사용해 데이터를 select할 때 발생할 수 있는 에러로
1:N의 관계를 가지고 있는 변수에 설정한 LAZY Loading 때문에 발생한다.
@ManyToOne(fetch = FetchType.LAZY)
// application.yml
jpa:
database: MYSQL
show-sql:
properties:
open-in-view: false
Open Session In View를 true로 설정하지 않으면 트랜잭션 시작 시점에 영속성 컨텐스트가 시작되어 트랜잭션이 종료되는 시점에 영속성 컨텍스트가 소멸되게 된다.
영속성 컨텐스트가 없어졌기 때문에 컨트롤러에서 가져올 때 조회할 수 없는 것이다.
해결 방법
1. Service.java 파일에서 DTO로 변환 후에 Controller로 리턴한다.
new ObjectDTO(ObjectEntity);
2. 변수의 설정을 즉시 로딩(Earger)으로 변경한다.
@ManyToOne(fetch = FetchType.EAGER)
그러나 즉시 로딩을 사용하는 경우 JPQL을 사용하면 N+1 문제가 발생할 수 있기 때문에 권장하지 않는다.
출처
https://jwdeveloper.tistory.com/310
https://cantcoding.tistory.com/78
'Error' 카테고리의 다른 글
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading '0') (0) | 2025.01.20 |
---|---|
[JPA] jpa SqlExceptionHelper - SQL Error: 1064, SQLState: 42000 (1) | 2024.09.12 |
[에러] java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 (0) | 2023.03.02 |
java.lang.nullpointerexception (0) | 2023.03.01 |
이클립스 sts 프로젝트 에러표시(팔간 엑스 표시) 해결하기 (0) | 2023.01.07 |
댓글