[JPA] Cannot call sendError() after the response has been committed

devdo·2022년 4월 22일
0

오류노트

목록 보기
6/7

오류 원인

이는 Spring JPA 양방향 매핑을 하고나면 자주 생기는 에러이다.

LAZY 로딩은 데이터베이스에서 Object를 가져올 때 맵핑 되어있는 다른 Object를 가져오지 않는 것이다.(혹은 나중에 필요할 때 가져오는 방법, 프록시 객체로.)

즉, Jackson은 매핑된 객체를 serialize를 하려고 한다. 하지만 Lazy 로딩에선 찾을 때 정상적인 Object가 아니기에 JavaassistLazyInitializer 때문에 실패하게 된다.

java.lang.IllegalStateException: Cannot call sendError() after the response has been committed


해결법

1) application 설정

spring:
  jackson:
    serialization:
      fail-on-empty-beans: false

2) @JsonIgnore

ManyToOne 컬럼에

매핑된 객체에 @Jsonignore

    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "study_group_id")
    private StudyGroup studyGroup;

나는 개인적으로 application 설정으로 해결이 되었다.



참고

https://thalals.tistory.com/227 [힘차게, 열심히 공대생]

https://jhkang-tech.tistory.com/92

profile
배운 것을 기록합니다.

0개의 댓글