one to many 일 대 다

jb kim·2022년 3월 4일
0

REST API 블로그 앱

목록 보기
25/65

포스트 코멘트(댓글) 관계

💨 posts 의 id를 comments의 post_id 로 참조

entity Comment

@Data
@AllArgsConstructor
@NoArgsConstructor

@Entity
@Table(name = "comments")
public class Comment {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
	private String name;
	private String email;
	private String body;
	
	//여러개(댓글)에 하나의 포스트 , 포스트 클래스 : OneToMany 하나의 포스트에 여러개 댓글
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "post_id", nullable = false)
	private Post post;
}

entity Post

@Entity
@Table(name = "posts", uniqueConstraints = {@UniqueConstraint(columnNames = {"title"})} )
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Post {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
	@Column(name = "title", nullable = false)
	private String title;
	
	@Column(name = "description", nullable = false)
	private String description;
	
	@Column(name = "content", nullable = false)
	private String content;
	
	@OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
	private Set<Comment> comments = new HashSet<>();
}

cascade = CascadeType.ALL, orphanRemoval = true

💦 부모(참조된Post의 id)의 값이 바뀌거나 삭제될때 참고하는 자식열(forign key)들은 삭제가 된다.
만약 삭제가 되지 않게할려면 대신 CascadeType.REMOVE 를 뺀 값입력
cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.PERSIST} 하고
orphanRemoval = true 도 제거하자.

참고
https://sbe03005dev.tistory.com/entry/JPA-orphanRemoval
https://tecoble.techcourse.co.kr/post/2021-08-15-jpa-cascadetype-remove-vs-orphanremoval-true/

실행확인(comments 테이블 자동생성)

profile
픽서

0개의 댓글