FK 제약 조건 때문에 게시글을 삭제하면 댓글이 참조하는 게시글이 사라지기 때문에
삭제가 되지 않는 오류 발생!
[ 해결법 ]
1. 댓글을 먼저 삭제하고, 게시글 삭제 2. 댓글(자식)의 FK에 값을 NULL로 변경하고 게시글 삭제 (null 처리하는 방법 : update) 3. CASECADE REMOVE 옵션 어노테이션을 이용해서 도움 받기 <- 지금 배울 것 4. FK 걸지 않는다. -> 실무에서 하는 방법. (귀찮기 때문)
제일 정상적인 방법은 NULL 처리하는 것
→ 부모 엔티티를 삭제하기 전에 자식 엔티티를 찾고,
부모 엔티티와 연관관계를 NULL 처리하기
→ 객체지향 스타일~
[ 어노테이션 도움 받기 ]
1. cascade = CascadeType.REMOVE
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 란? ]
게시글 조회를 먼저 해서, 게시글에 코멘트를 추가함 그리고 나서 persist하면 댓글도 같이 날아감 보드 영속화 할 때 댓글도 같이 영속화 된다는 것인데 비추!!!!!
어떤 엔티티를 저장할 때(EntityManager.persist() 메소드를 호출할 때), 그 엔티티와 연관된 다른 엔티티들도 함께 저장하고 싶을 때 CascadeType.PERSIST 옵션을 사용한다.
[ 정방향 insert ] → 이걸 쓰자
[ 역방향 insert ] → 헷갈리니까 쓰지 마라!
Board에 댓글 하나 담을 수 있게 addReply 생성
Board 객체에 접근해서, 걔가 들고있는 양방향 매핑의 댓글에 reply를 추가 이렇게만 해도 save가 됨! 이게 바로 cascade = CascadeType.PERSIST! 그냥 그 객체에다가 댓글 객체를 추가하면 됨! 그치만 헷갈리니까 역방향은 쓰지마라 ^^
객체 지향적으로 INSERT 해라 ? 아니!
[ 공부할 것 ]
* persist 반대 방향 영속화 → 추천 안함 (정방향 insert 하기)
* remove 자식과 함께 삭제
* 고아 객체
Share article