"Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]"

ejoo·2024년 3월 4일

Error

목록 보기
4/4

에러 메시지
Resolved [org.springframework.http.converter.HttpMessageConversionException:
Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]]

fetch = FetchType.LAZY로 인한 JSON 반환 오류

게시글에 작성자 정보를 담기 위해 Notice 엔티티에 Member 엔티티를 반환시켰다.

하지만

public class Notice extends BaseEntity {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "member_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
    private Member member;

    @Column(length = 200)
    private String title;

    @Column(columnDefinition = "MEDIUMTEXT")
    private String content;
}

Member와 Notice는 1:N 관계이기 때문에
@ManyToOne(fetch = FetchType.LAZY) 어노테이션을 만들어줬고,
프록시는 복사본, 빈 객체이며, LAZY는 객체를 사용할 때 member가 로드 되기 때문에 member 정보가 출력되지 않았다.

NoticeDTO에서 MemberEntity 대신, MemberDTO를 반환하며 초기화 한다.

@Getter
@Builder
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Schema(description = "공지사항 상세 조회 항목")
public class NoticeResponse {
    @Schema(description = "공지사항 고유 식별 번호")
    private Long id;

    @Schema(description = "공지사항 작성자")
    private MemberResponse member;

    @Schema(description = "공지사항 제목")
    private String title;

    @Schema(description = "공지사항 내용")
    private String content;

    public static NoticeResponse of(Notice notice) {
        return NoticeResponse.builder()
                .id(notice.getId())
                .member(MemberResponse.of(notice.getMember()))
                .title(notice.getTitle())
                .content(notice.getContent())
                .build();
    }
}
profile
안녕하세요

0개의 댓글