์ญ์
์ญ์ ํ๋ค๊ณ ํด์ฃผ๊ณ
๋ณต๊ตฌ๋ฅผ ์ํด ๋ณด๊ดํด ๋์๋ค๊ฐ
์ผ์ ๊ธฐ๊ฐ์ด ์ง๋ฌ์ ๊ฒฝ์ฐ์๋ Cascade๋ฅผ ์ฌ์ฉํด ์ญ์
Cascade
์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ณต์ ํ๋(์ด๋ ํ ์ํฐํฐ์ ์๋ช
์ฃผ๊ธฐ ์์กด) ์ํฐํฐ๋ค์ด ์กด์ฌํ ๊ฒฝ์ฐ
Cascade๋ฅผ ์ฌ์ฉํ๋ฉด ์ข๋ค.
๊ฒ์ํ์ด ์ ๊ฑฐ๋จ๊ณผ ๋์์
๊ทธ ์์ ์กด์ฌํ๋ ๊ฒ์๊ธ, ๋๊ธ (ํน์ ์ถ์ฒ)์ด ๋ชจ๋ ์ ๊ฑฐ๋ ๊ฒ์ด๋ค.
๋จ๋ฐฉํฅ ๋งคํ์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์๋ฐฉํฅ ๋งคํ์ ์ ํ ์ฌ์ฉํ ํ์๊ฐ ์๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ Cascade๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
์ฆ @ManyToOne ์ด๋
ธํ
์ด์
์ ํํ์ผ๋ก๋ง ์ถฉ๋ถํ ๋งคํ์ด ๊ฐ๋ฅํ๋ฐ๋ ๋ถ๊ตฌํ๊ณ
@OneToMany ์ด๋
ธํ
์ด์
์ ํ์ฉํ๊ณ ๋ถํ์ํ ์๋ฐฉํฅ ๋งคํ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
์๋ฅผ๋ค์ด ๋๊ธ ์๋์ ๋๋๊ธ์ ๋ฌ๊ณ ์ด๋ฌํ ์์ผ๋ก ๊ผฌ๋ฆฌ๋ฅผ ๋ฌด๋ ํ์์ ์ง์นญํ๋๋ฐ
์ด๋ฌํ ๋ถ๋ถ์ 1:N์ ๊ด๊ณ๋ก ํํ์ด ๊ฐ๋ฅํ๋ค.
์ด๋ฌํ ๋ถ๋ถ์ ์์ด์๋ ์๋ฐฉํฅ ๋งคํ์ด ํ์ํ๋ค.
- JPA์ ์ํด ์ฒ๋ฆฌ๋์ด JPA์ ์ํด ์ธ๋ ํค๋ฅผ ์ฐพ์๊ฐ๋ฉฐ ์ฐธ์กฐํ๋ ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐ
- ์ฌ๋ฌ๊ฐ์ ์ฟผ๋ฆฌ์ฌ์ฉํด ์ ๊ฑฐ
@Delete
Cascade์ ๊ฐ์ ํจ๊ณผ
1
@OnDelete(action = OnDeleteAction.CASCADE)
- ๋ถํ์ํ ์ฐ๊ด๊ด๊ณ ๋งคํ์ ์ ๊ฑฐํด์ฃผ๊ณ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ ๊ฑฐ
- DB์ ์ํด ์ง์ ์ฒ๋ฆฌ
- ๋จ์ผ ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ฐ์์ ์ผ๋ก ์ ๊ฑฐ
๊ตฌํ
post๋ฅผ ์ญ์ ํ๋ฉด
ํด๋น post์ ์์์ธ comment๋ค์ด ๋ชจ๋ ์ญ์ ๋๊ณ
ํด๋น post๊ฐ ์ญ์ ๋จ
Post
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Builder
@Entity
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Post extends BaseTimeEntity {
...
@OneToMany(fetch = LAZY, // CascadeType๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ถ๊ฐ
mappedBy = "post",
cascade = {CascadeType.PERSIST, CascadeType.REMOVE}) // ๋ถ๋ชจ ์ํฐํฐ๋ฅผ ์ญ์ ํ๋ฉด ์์ ์ํฐํฐ ์ญ์
private List<Comment> comment = new ArrayList<>();
...
}
Comment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Entity
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Comment extends BaseTimeEntity {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "post_id", nullable = false)
private Post post; // mappedBy์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ฃ์ด์ฃผ์ด์ผํจ
...
}
(์ฐธ๊ณ )