๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/JPA

[JPA] @OnDelete VS cascade = CascadeType.REMOVE

by ynzu๐Ÿค 2021. 12. 13.
๋ฐ˜์‘ํ˜•

๊ด€๊ณ„ํ˜• DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” @OnDelete์™€ cascade = CascadeType.REMOVE์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด์ž!

@OnDelete

  • DDMS ๋ ˆ๋ฒจ์—์„œ ์ž‘๋™
  • @OnDelete(action = OnDeleteAction.CASCADE)
  • DDL ์ƒ์„ฑ์‹œ cascade ์ œ์•ฝ ์กฐ๊ฑด์ด ์ƒ์„ฑ ๋จ.

์—ฌ๊ธฐ์„œ DDL์ด๋ž€ Data Definition Language๋กœ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ์–ธ์–ด์ด๋ฉฐ, CREATE, ALTER, DROP, TRUNCATE๋ฅผ ๋งํ•œ๋‹ค.

 

casecade=CascadeType.REMOVE

  • JPA ๋ ˆ๋ฒจ์—์„œ ์ž‘๋™
  • JPA๊ฐ€ ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์—ฐ๊ด€๋œ ์ž์‹ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ DELETE ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ ํ•จ

 


 

๋ณธ์ธ์˜ ๊ฒฝ์šฐ ๋ถ€๋ชจ์™€ ์ž์‹์˜ 1:N ๊ด€๊ณ„์ผ ๋•Œ ์•„๋ž˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œ์ผœ์•ผ ํ–ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ 1 : ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ญ์ œ ํ•  ๊ฒฝ์šฐ ์ž์‹ ์—”ํ‹ฐํ‹ฐ๋Š” ๋ชจ๋‘ ์‚ญ์ œ๋˜์–ด์•ผ ํ•œ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ 2 : ์ž์‹ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ญ์ œํ•ด๋„ ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ๋Š” ์‚ญ์ œ๋˜๋ฉด ์•ˆ๋œ๋‹ค.

 
1. cascade = CascadeType.REMOVE๋ฅผ ์„ค์ •ํ•  ๊ฒฝ์šฐ
์ž์‹ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ , ๊ทธ ๋‹ค์Œ ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰ ๋œ๋‹ค. 
๊ทธ๋ฆฌ๊ณ  ์ž์‹ ์—”ํ‹ฐํ‹ฐ ํ•œ ๊ฑด์„ ์‚ญ์ œ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์— ์—ฐ๊ด€๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌ ํ•˜๋ฏ€๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
(๋ถ€๋ชจ์™€ ์—ฐ๊ด€๋œ ์ž์‹์ด ํ•œ๊ฑด์ด๋ผ๋ฉด ์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.)
 
์˜ค๋ฅ˜: "๋ถ€๋ชจ" ํ…Œ์ด๋ธ”์˜ ์ž๋ฃŒ ๊ฐฑ์‹ , ์‚ญ์ œ ์ž‘์—…์ด "fk7tttuo3u7xbkpq73oyc128uhl" ์ฐธ์กฐํ‚ค(foreign key) ์ œ์•ฝ ์กฐ๊ฑด - "์ž์‹" ํ…Œ์ด๋ธ” - ์„ ์œ„๋ฐ˜ํ–ˆ์Šต๋‹ˆ๋‹ค 
  Detail: (req_id)=(904a90be-8055-413e-b1f8-871e59287dbf) ํ‚ค๊ฐ€ "์ž์‹" ํ…Œ์ด๋ธ”์—์„œ ์—ฌ์ „ํžˆ ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค.
 
 
๋˜ํ•œ ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ•ด๋„ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
 
์˜ค๋ฅ˜: "๋ถ€๋ชจ" ํ…Œ์ด๋ธ”์˜ ์ž๋ฃŒ ๊ฐฑ์‹ , ์‚ญ์ œ ์ž‘์—…์ด "fk7tttuo3u7xbkpq73oyc128uhl" ์ฐธ์กฐํ‚ค(foreign key) ์ œ์•ฝ ์กฐ๊ฑด - "์ž์‹" ํ…Œ์ด๋ธ” - ์„ ์œ„๋ฐ˜ํ–ˆ์Šต๋‹ˆ๋‹ค 
  Detail: (req_id)=(34accdf4-3fbe-4b5e-8d97-85ff9e6b9bc0) ํ‚ค๊ฐ€ "์ž์‹" ํ…Œ์ด๋ธ”์—์„œ ์—ฌ์ „ํžˆ ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค.

 

2. ๋‘˜๋‹ค ์„ค์ •ํ•  ๊ฒฝ์šฐ

์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ ์ž์‹ ์—”ํ‹ฐํ‹ฐ ํ•˜๋‚˜๋งŒ ์‚ญ์ œํ•ด๋„ ๋ถ€๋ชจ์™€ ๊ด€๋ จ์žˆ๋Š” ๋ชจ๋“  ์ž์‹ ์—”ํ‹ฐํ‹ฐ๊นŒ์ง€ ์‚ญ์ œ ๋œ๋‹ค.

 

๊ฒฐ๋ก  : @OnDelete(action= OnDeleteAction.CASCADE)๋งŒ ์„ค์ •ํ•˜์—ฌ ์œ„ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œ์ผฐ๋‹ค!

@ManyToOne(fetch = FetchType.LAZY)
@OnDelete(action= OnDeleteAction.CASCADE)
@JoinColumn(name = "REQ_ID", referencedColumnName = "REQ_ID", columnDefinition ="VARCHAR(36)")
private Parent parent;
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€