• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Lazy 강제 초기화를 해도 프록시 객체가 유지 됩니다.

22.04.24 14:50 작성 조회수 169

0

public List<Drawing> getDrawingList() {
List<Drawing> drawings = drawingService.findDrawings();
for (Drawing drawing : drawings) {
drawing.getDrawingCategory().getName();
}
return drawings;
}
위 코드 실행시에러 내용입니다.
 
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->.drawing.entity.Drawing["drawingCategory"]->.drawingcategory.entity.DrawingCategory$HibernateProxy$dtz0HezH["hibernateLazyInitializer"])] with root cause
 
findDrawings 에서 JpaRepository가 findAll을 return 해줍니다.
 
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "category_id", nullable = false)
private DrawingCategory drawingCategory;
Drawing은 DrawingCategory를 ManyToOne으로 단방향 연관관계를 맺고 있습니다.
 
그래서,  drawing.getDrawingCateogory.getName 으로 Lazy 강제 초기화를 해주었는데 위의 에러가 나오네요..
 
fetch join을 사용하면 해결이 되긴 합니다만 get으로 Lazy연관관계의 값을 직접 가져와도 HibernateProxy객체가 유지되는지 궁금합니다.

답변 1

답변을 작성해보세요.

0

안녕하세요. kmr345님

강제 초기화를 해주어도 프록시 객체이기 때문에 이런 오류가 발생할 수 있습니다.

활용2편을 공부해보시면 문제 해결방안을 찾으실 수 있을거에요^^

감사합니다.