문제 1
회원가입할 때 아이디가 같게 되면 user에 unique 위반했다는 500에러가 뜬다.

[user] 모델에 살펴보면
unique가 걸려있어서 동일한 아이디로 회원가입 안된다
@Column(nullable = false, length = 100, unique=true)
private String username;
[GlobalExceptionHandler]
모든 Exception이 여기로 들어온다.
@ExceptionHandler(value = Exception.class)
public ResponseDto<String> handleArgumentException(Exception e) {
return new ResponseDto<String>(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage()); //500 에러
}
INTERNAL_SERVER_ERROR이 500에러이다.
에러는 ResponseDto로 응답이 된다.
[ResponseDto]
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ResponseDto<T> {
int status;
T data;
}
같은 아이디로 회원가입할때 막는법
[user]
$.ajax({
//회원가입 수행 요청
type:"POST",
url:"/auth/joinProc",
data:JSON.stringify(data), // http body데이터 (마임데이터가 필요)
contentType:"application/json; charset=utf-8", // body데이터가 어떤 타입인지(MIME)
dataType: "json"
}).done(function(resp){
if(resp.status === 500){
alert("회원가입이 실패하였습니다.");
}else{
alert("회원가입이 완료되었습니다.");
location.href="/";
}
- 결과

문제 2
댓글이 있을때는 게시글 삭제가 안된다. (삭제 팝업창은 떠도 실제로 삭제가 안됨)
- 에러메세지
Cannot delete or update a parent row: a foreign key constraint fails (`blog`.`reply`, CONSTRAINT `FKayalcledc3l0g5lt1balg0jwf` FOREIGN KEY (`boardId`) REFERENCES `board` (`id`))
게시글과 댓글과 연관돼 있어서 게시글을 삭제할때 댓글은 어떻게 할지 설정이 안되어있어서이다.
예를들어 게시글을 삭제한다면 댓글을 모두 삭제? 아니면 댓글은 남겨두도록 할지?
이런 설정들을 cascade 옵션(전파속성) 을 이용하면 된다
cascade에 여러옵션이 있다 그 중
- cascade = CascadeType.PERESIST :
: 원래 board 객체를 만들어서 save를 할때(게시글 작성,수정) reply는 연관관계 주인이 아니라서 DB에 넣을 필요없다
하지만 PERSIST는 연관관계가 없어도 데이터에 반영이 된다.
- cascade = CascadeType.REMOVE : board게시글을 지울때 댓글들도 한꺼번에 지운다.
- cascade = CascadeType.ALL : PERESIST, REMOVE 함께 작동
나는 게시글 삭제할때 모든 댓글들 삭제하도록 REMOVE 한다.
[Board]
@OneToMany(mappedBy = "board",fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
@JsonIgnoreProperties({"board"})
@OrderBy("id desc")
private List<Reply> replys;
반응형
LIST
'Spring boot | 블로그 만들기' 카테고리의 다른 글
블로그 만들기 | 댓글작성 Native Query 사용하기 (1) | 2022.12.01 |
---|---|
블로그 만들기 | 댓글 작성을 dto 사용해보기 (0) | 2022.12.01 |
블로그 만들기 | 게시글 댓글 작성, 댓글 삭제 (0) | 2022.11.25 |
블로그 만들기 | 무한참조 해결법 2가지 @JsonIgnoreProperties , 객체 다이렉트 호출 (0) | 2022.11.24 |
블로그 만들기 | 게시글 댓글 기능과 무한 참조 (0) | 2022.11.24 |