JPA

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

dev.mk 2023. 11. 11. 14:38
반응형

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

 

Before

 

게시판

Board.java

@Table(name = "jpa_board")
@Entity
@Getter
@Setter
@ToString
@NoArgsConstructor 
public class Board {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "JPA_BOARD_SEQ")
    @Column(name="bno")
    private int bno;	//게시판(PK)

    @Column(name="title", columnDefinition = "varchar(100)")
    private String title;
    
    @Column(name="content", columnDefinition = "varchar(255)")
    private String content;
    
    @CreationTimestamp
    @Column(name="reg_date")
    @Temporal(TemporalType.DATE)
    private Date regDate;
    
    @OneToMany(mappedBy = "board")
    private List<Comment> comments;
	
}

 

댓글

Comment.java

@Table(name = "jpa_comment")
public class Comment {
	
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "JPA_COMMENT_SEQ")
    @Column(name="cno")
    private int cno;	//댓굴(PK)

    @Column(name="content", columnDefinition = "varchar(255)")
    private String content;
	
    @CreationTimestamp	// insert시 SYSDATE
    @Column(name="reg_date")
    @Temporal(TemporalType.DATE) // 포맷 yyyy-MM-dd		
    private Date regDate;
	
    //댓글테이블 N:1 관계설정
    @ManyToOne
    @JoinColumn(name = "bno")
    private Board board;
	
}

 

Board 안에 있는 Comment List가 Board를 참조하고 Comment안에 있는 Board가 서로를 참조하면서 무한 재귀함수가 실행 되게 된다. 그래서 오류가 발생한다.

 

 

After

Comment.java

@Table(name = "jpa_comment")
public class Comment {
	
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "JPA_COMMENT_SEQ")
    @Column(name="cno")
    private int cno;	//댓굴(PK)

    @Column(name="content", columnDefinition = "varchar(255)")
    private String content;
	
    @CreationTimestamp	// insert시 SYSDATE
    @Column(name="reg_date")
    @Temporal(TemporalType.DATE) // 포맷 yyyy-MM-dd		
    private Date regDate;
	
    //댓글테이블 N:1 관계설정
    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "bno")
    private Board board;
	
}

 

Comment 엔티티안에 Board연결부분에  @JsonIgnore 어노테이션을 추가하면된다.

 

Comment.java Entity에서 Board.java Entity에게 @JsonIdentityInfo 또는 @JsonIgnore 설정을 해서 무한재귀 관계를 끊어야 한다.

반응형