문제 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

+ Recent posts