- [JPA] 27. 게시글 삭제 오류 해결하기2024년 10월 17일
- Song hyun
- 작성자
- 2024.10.17.:25
728x90반응형[JPA] 27. 게시글 삭제 오류 해결하기
** fk 제약 조건 때문에 게시글을 삭제하면 댓글이 참조하는 게시글이 사라지기 때문에 삭제가 될 수 없음.
- 어노테이션을 이용해 도움 받기
- 댓글의 FK에 값을 NULL로 변경하고 게시글 삭제
- 댓글을 먼저 삭제
1. Cascade 설정하기
package com.tenco.blog_v2.board; import com.tenco.blog_v2.reply.Reply; import com.tenco.blog_v2.user.User; import jakarta.persistence.*; import lombok.*; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; @NoArgsConstructor @Entity @Table(name = "board_tb") @Getter @Setter public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) // 기본키 전략 db 위임 private Integer id; private String title; @Lob // 대용량 데이터 저장 가능 private String content; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; // 게시글 작성자 정보 // created_at 컬럼과 매핑하며, 이 필드는 데이터 저장시 자동으로 설정 됨 @Column(name = "created_at", insertable = false, updatable = false) private Timestamp createdAt; // 코드 추가 // 해당 테이블에 컬럼을 만들지 마 // 즉, JPA 메모리상에서만 활용 가능한 필드 이다. @Transient boolean isBoardOwner; // 댓글 엔티티를 넣어서 관계 설정하면 -- 양방향 // 해당 게시글이 삭제되면 종속되어 있는 댓글들을 먼저 삭제 해라 @OneToMany(mappedBy = "board", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE) private List<Reply> replies = new ArrayList<>(); // 빠른 초기화 @Builder public Board(Integer id, String title, String content, User user, Timestamp createdAt) { this.id = id; this.title = title; this.content = content; this.user = user; this.createdAt = createdAt; } }
728x90반응형'JPA' 카테고리의 다른 글
[JPA] 29. CORS란 뭘까? (0) 2024.10.21 [JPA] 28. 댓글 쓰기 및 삭제 및 인터셉터 적용 (2) 2024.10.17 [JPA] 26. 댓글 목록 보기 기능 (0) 2024.10.17 [JPA] 25. 댓글 기능 작성하기 (1) 2024.10.16 [JPA] 24. Mustache를 사용한 Blog 제작 - 인터셉터 만들기 (0) 2024.10.11 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)