728x90
반응형
🚨 문제 발생
Show
엔티티와ShowSchedule
엔티티를 생성하고,@ManyToOne
으로ShowSchedule
에Show
를 연결해주었는데,@GetMapping
으로ShowSchedule
리스트를 받아오려고 할 때 500에러 발생- beanstalk 에러 로그를 자세히 보니 아래와 같은 오류 발생
2023-04-25 00:45:10.162 WARN 1 --- [nio-5000-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: could not initialize proxy [Musicalendar.musicalendarproject.domain.Show#1] - no Session; nested exception is com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy [Musicalendar.musicalendarproject.domain.Show#1] - no Session (through reference chain: java.util.ArrayList[0]->Musicalendar.musicalendarproject.domain.ShowSchedule["show"]->Musicalendar.musicalendarproject.domain.Show$HibernateProxy$H9GDk6si["title"])]
ShowSchedule
엔티티에서Show
엔티티와 매핑은 아래와 같이 해두었음
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
@JoinColumn(name="show_id")
@JsonManagedReference
private Show show;
💡 문제 해결
- 자세히 읽어보니까
proxy
관련 문제 같았음 - 나는 fetch 전략을
LAZY
로 해두었었는데, 생각해보니ShowSchedule
이 호출될 때, 얘와 연관된Show
는 <지연로딩>에 의해서proxy
객체로 저장이 된다. 그렇기 때문에 이를 가져오려고 할 때, 영속성 컨텍스트에 저장이 되어있지 않아서 못 가져오는 것이라고 판단했음 - fetch 전략을
LAZY
(지연로딩)에서EAGER
(즉시로딩)로 바꾸어주니까 리스트 값이 잘 나온다!
@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.ALL}) // 즉시로딩으로 수정
@JoinColumn(name="show_id")
@JsonManagedReference
private Show show;
728x90
반응형
댓글