티스토리 뷰

Project 댕린이집

[게시판] 게시글 삭제

xoo | 수진 2024. 6. 26. 23:11

 [ 클라이언트 ] 

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): boardServicedeleteBoard 메서드를 호출하여 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와 다대일 관계를 설정합니다.

BoardEntity.java

 

그렇다면 CommentEntity.java 는 이런 모습이 됩니다.

CommentEntity.java

 

 


 

 

💻 [ 결과 ]  

먼저 테스트글을 등록해봅니다.

 

잘 등록된 것을 확인한 후

 

내가 작성한 글에는 이렇게 수정, 삭제 버튼이 보이게 됩니다.

 

삭제를 누르면 삭제했다는 알림이 뜨게 되고

 

글 목록에서 사라진 것을 확인할 수 있습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함