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 설정을 해서 무한재귀 관계를 끊어야 한다.
반응형