[ 클라이언트 ]
BoardView.js
// 게시글 삭제
let del = () => {
axios.delete(`http://localhost:8082/api/v1/auth/n/deleteBoard?id=${id}`, {
headers: {
'Authorization': 'Bearer ' + cookies.accessToken
}
})
.then(() => {
console.log("게시글 삭제 성공!");
alert("게시글을 삭제하였습니다 🗑️")
navigate("/board"); // 삭제 후 게시글 목록으로 이동
})
.catch((error) => {
console.log("Error: ", error);
});
};
[ 서버 ]
BoardController.java
@DeleteMapping("/deleteBoard")
public void deleteBoard(@RequestParam(name = "id") Long id) {
boardService.deleteBoard(id);
}
- @DeleteMapping("/deleteBoard") : HTTP DELETE 요청을 /deleteBoard URL 경로와 매핑합니다.
- @RequestParam(name = "id") Long id: 요청 매개변수 id를 URL 쿼리 파라미터로 받아옵니다. 예를 들어, 클라이언트가 /deleteBoard?id=1과 같이 요청을 보내면 id 파라미터의 값이 메서드의 매개변수로 전달됩니다.
- boardService.deleteBoard(id): boardService의 deleteBoard 메서드를 호출하여 id에 해당하는 게시물을 삭제합니다.
BoardService.java
public void deleteBoard(Long id) {
Optional<BoardEntity> boardEntity = boardRepository.findById(id);
boardRepository.delete(boardEntity.get());
}
- findById(id): 주어진 ID에 해당하는 게시물을 boardRepository에서 찾습니다.
- boardRepository.delete(boardEntity.get()): BoardRepository에서 delete() 메서드를 사용하여 해당하는 게시물을 삭제합니다.
CascadeType.ALL
// CommentEntity와 일대다 관계
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "board_id") // 외래 키를 CommentEntity에 설정
private List<CommentEntity> commentEntityList;
// LikeListEntity와 일대다 관계
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "board_id") // 외래 키를 LikeListEntity에 설정
private List<LikeListEntity> likeListEntityList;
CascadeType.ALL을 사용하면 부모 엔티티를 삭제할 때 연관된 자식 엔티티들도 함께 삭제됩니다. 즉, BoardEntity를 삭제하면 해당 게시글에 연결된 CommentEntity와 LikeListEntity도 함께 삭제됩니다.
💣 [ 트러블 슈팅 ] java.sql.SQLSyntaxErrorException: Unknown column 'cel1_0.comment_id' in 'field list’
문제
원인
SQL 쿼리에서 'cel1_0.comment_id'라는 컬럼이 존재하지 않는다는 것
⇒ 엔티티 클래스에서 comment_id 컬럼이 제대로 매핑되어 있는지 확인
저의 경우에는 이렇게 BoardEntity 중 CommentEntity, LikeListEntity와 일대다 관계를 맺는 부분에서 name이 잘못 지정된 것이 원인이었습니다!
해결
• BoardEntity는 CommentEntity 및 LikeListEntity와의 일대다 관계를 설정하고, 각각의 엔티티에 board_id 외래 키를 @JoinColumn을 사용하여 명시적으로 지정합니다.
• CommentEntity 및 LikeListEntity 클래스는 board_id를 외래 키로 가지며, BoardEntity와 다대일 관계를 설정합니다.
그렇다면 CommentEntity.java 는 이런 모습이 됩니다.
💻 [ 결과 ]
먼저 테스트글을 등록해봅니다.
잘 등록된 것을 확인한 후
내가 작성한 글에는 이렇게 수정, 삭제 버튼이 보이게 됩니다.
삭제를 누르면 삭제했다는 알림이 뜨게 되고
글 목록에서 사라진 것을 확인할 수 있습니다.
'Project 댕린이집' 카테고리의 다른 글
[게시판] 좋아요 (0) | 2024.06.28 |
---|---|
[게시판] 조회수 (0) | 2024.06.27 |
PUT vs POST (0) | 2024.06.25 |
[게시판] 게시글 수정(2) (0) | 2024.06.24 |
[게시판] 게시글 수정(1) - 사용자 판별하여 수정/삭제 버튼 렌더링 (0) | 2024.06.22 |