inblog logo
|
codingb
    Spring

    게시글 삭제 오류 해결 (+cascade - 정방향)

    coding S's avatar
    coding S
    Mar 20, 2024
    게시글 삭제 오류 해결 (+cascade - 정방향)
    💡
    FK 제약 조건 때문에 게시글을 삭제하면 댓글이 참조하는 게시글이 사라지기 때문에 삭제가 되지 않는 오류 발생!
     

    [ 해결법 ]

    1. 댓글을 먼저 삭제하고, 게시글 삭제 2. 댓글(자식)의 FK에 값을 NULL로 변경하고 게시글 삭제 (null 처리하는 방법 : update) 3. CASECADE REMOVE 옵션 어노테이션을 이용해서 도움 받기 <- 지금 배울 것 4. FK 걸지 않는다. -> 실무에서 하는 방법. (귀찮기 때문)
    💡
    제일 정상적인 방법은 NULL 처리하는 것 → 부모 엔티티를 삭제하기 전에 자식 엔티티를 찾고, 부모 엔티티와 연관관계를 NULL 처리하기 → 객체지향 스타일~

    [ 어노테이션 도움 받기 ]

    1. cascade = CascadeType.REMOVE

    notion image
    💡
    cascade = CascadeType.REMOVE → 게시글이 삭제되면 자식들도 다 삭제
    Hibernate: select b1_0.id, b1_0.content, b1_0.created_at, b1_0.title, b1_0.user_id from board_tb b1_0 where b1_0.id=? Hibernate: select r1_0.board_id, r1_0.id, r1_0.comment, r1_0.created_at, r1_0.user_id from reply_tb r1_0 where r1_0.board_id=? Hibernate: delete from reply_tb where id=? Hibernate: delete from reply_tb where id=? Hibernate: delete from reply_tb where id=? Hibernate: delete from board_tb where id=? Hibernate: select b1_0.id, b1_0.content, b1_0.created_at, b1_0.title, b1_0.user_id from board_tb b1_0 order by b1_0.id desc
    💡
    게시글 삭제 버튼을 눌렀더니…. 댓글 3개 삭제하고, 게시글 삭제 되는 쿼리 발동
    💡
    remove 이거 쓰자 → 게시글 삭제할 때, 관련된 댓글도 같이 삭제하는 것
     

    2. cascade = CascadeType.PERSIST

    [ Persist 란? ]

    notion image
    notion image
    게시글 조회를 먼저 해서, 게시글에 코멘트를 추가함 그리고 나서 persist하면 댓글도 같이 날아감 보드 영속화 할 때 댓글도 같이 영속화 된다는 것인데 비추!!!!!
    💡
    어떤 엔티티를 저장할 때(EntityManager.persist() 메소드를 호출할 때), 그 엔티티와 연관된 다른 엔티티들도 함께 저장하고 싶을 때 CascadeType.PERSIST 옵션을 사용한다.
     

    [ 정방향 insert ] → 이걸 쓰자

    notion image

    [ 역방향 insert ] → 헷갈리니까 쓰지 마라!

    notion image
    💡
    Board에 댓글 하나 담을 수 있게 addReply 생성
    notion image
    Board 객체에 접근해서, 걔가 들고있는 양방향 매핑의 댓글에 reply를 추가 이렇게만 해도 save가 됨! 이게 바로 cascade = CascadeType.PERSIST! 그냥 그 객체에다가 댓글 객체를 추가하면 됨! 그치만 헷갈리니까 역방향은 쓰지마라 ^^

    객체 지향적으로 INSERT 해라 ? 아니!

     

    notion image

     
    💡
    [ 공부할 것 ] * persist 반대 방향 영속화 → 추천 안함 (정방향 insert 하기) * remove 자식과 함께 삭제 * 고아 객체
     
    Share article

    codingb

    RSS·Powered by Inblog