๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL

03/07(๋ชฉ) ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ Java 51์ผ์ฐจ TIL - Cascade, orphanRemoval

by ๊ฐ์ž๊ฐœ๋ฐœ๊พผ 2024. 3. 7.

 

๐Ÿ“–  ์˜ค๋Š˜์˜ ํ•™์Šต ํ‚ค์›Œ๋“œ

  • Cascade, orphanRemoval

 

๐Ÿฅ”  Cascade (์˜์†์„ฑ ์ „์ด)

- ์‚ฌ์šฉ ์œ„์น˜

: ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ ๋ฐ˜๋Œ€ํŽธ - ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ(N:1 ์—์„œ 1)

: ์ฆ‰, @OneToMany๊ฐ€ ์žˆ๋Š” ์ชฝ or @OneToOne๋„ ๊ฐ€๋Šฅ

 

- ์‚ฌ์šฉ ์กฐ๊ฑด

: ์–‘์ชฝ ์—”ํ‹ฐํ‹ฐ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์ด ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋น„์Šทํ•ด์•ผํ•œ๋‹ค.

: ex) ๊ฒŒ์‹œ๊ธ€์ด ์‚ญ์ œ๋˜๋ฉด ์ฒจ๋ถ€ํŒŒ์ผ๋„ ๊ฐ™์ด ์‚ญ์ œ ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

: ๋Œ€์ƒ ์—”ํ‹ฐํ‹ฐ๋กœ์˜ ์˜์†์„ฑ ์ „์ด๋Š” ํ˜„์žฌ ์—”ํ‹ฐํ‹ฐ์—์„œ๋งŒ ์ „์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. (๋‹ค๋ฅธ ๊ณณ์—์„œ ๋˜ ๊ฑธ๋ฉด ์•ˆ๋จ)

: ex) ์ฒจ๋ถ€ํŒŒ์ผ์„ ๊ฒŒ์‹œ๊ธ€์ด ์•„๋‹Œ ๋‹ค๋ฅธ๊ณณ์—์„œ ์˜์†์„ฑ ์ „์ด๋ฅผ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

- ์˜ต์…˜ ์ข…๋ฅ˜

  • ALL : ์ „์ฒด ์ƒํƒœ ์ „์ด
  • PERSIST : ์ €์žฅ ์ƒํƒœ ์ „์ด
  • REMOVE : ์‚ญ์ œ ์ƒํƒœ ์ „์ด
  • MERGE : ์—…๋ฐ์ดํŠธ ์ƒํƒœ ์ „์ด
  • REFERESH : ๊ฐฑ์‹  ์ƒํƒœ ์ „์ด
  • DETACH : ๋น„์˜์†์„ฑ ์ƒํƒœ ์ „์ด

 

 

๐Ÿฅ”  orphanRemoval (๊ณ ์•„ ๊ฐ์ฒด ์ œ๊ฑฐ)

- ์‚ฌ์šฉ ์œ„์น˜

: @OneToMany ๋˜๋Š” @OneToOne์—์„œ ์‚ฌ์šฉ - ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ

 

- ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

: Cascade.REMOVE์™€ ๋น„์Šทํ•œ ์šฉ๋„๋กœ ์‚ญ์ œ๋ฅผ ์ „ํŒŒํ•˜๋Š”๋ฐ ์“ฐ์ธ๋‹ค.

: ๋ถ€๋ชจ ๊ฐ์ฒด์—์„œ ๋ฆฌ์ŠคํŠธ ์š”์†Œ์‚ญ์ œ๋ฅผ ํ–ˆ์„๊ฒฝ์šฐ ํ•ด๋‹น ์ž์‹ ๊ฐ์ฒด๋Š” ๋งคํ•‘์ •๋ณด๊ฐ€ ์—†์–ด์ง€๋ฏ€๋กœ ๋Œ€์‹  ์‚ญ์ œํ•ด์ค€๋‹ค.

 

โ—๏ธ Cascade.REMOVE์™€ opphanRemoval์˜ ์ฐจ์ด

 

Cascade.REMOVE์˜ ๊ฒฝ์šฐ 1์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ๋ฅผ em.remove๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์‚ญ์ œํ•  ๋•Œ,

๊ทธ ์•„๋ž˜์— ์žˆ๋Š” N์— ํ•ด๋‹นํ•˜๋Š” ์ž์‹ ์—”ํ‹ฐํ‹ฐ๋“ค์ด ์‚ญ์ œ๋˜๋Š” ๊ฒƒ์ด์ž…๋‹ˆ๋‹ค.

orphanRemoval=true๋Š” ์œ„ ์ผ€์ด์Šค๋„ ํฌํ•จํ•˜๋ฉฐ, 1์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ์˜ ๋ฆฌ์ŠคํŠธ์—์„œ ์š”์†Œ๋ฅผ

์‚ญ์ œํ•˜๊ธฐ๋งŒ ํ•ด๋„ ํ•ด๋‹น N์— ํ•ด๋‹นํ•˜๋Š” ์ž์‹ ์—”ํ‹ฐํ‹ฐ๊ฐ€ delete๋˜๋Š” ๊ธฐ๋Šฅ๊นŒ์ง€ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ฆ‰, orphanRemoval=true๋Š” ๋ฆฌ์ŠคํŠธ ์š”์†Œ๋กœ์จ์˜ ์˜์†์„ฑ ์ „์ด๋„ ํ•ด์ค€๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

 

 

๐Ÿฅ”  ์˜์†์„ฑ ์ „์ด ์ตœ๊ฐ• ์กฐํ•ฉ

orphanRemoval=true + Cascade.ALL

์ด ๋‘๊ฐœ๋ฅผ ํ•จ๊ป˜ ์„ค์ •ํ•˜๋ฉด ์ž์‹์—”ํ‹ฐํ‹ฐ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์ด ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ์™€ ๋™์ผํ•ด์ง€๋ฉฐ,

์ง์ ‘ ์ž์‹ ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฏ€๋กœ ์ž์‹ ์—”ํ‹ฐํ‹ฐ์˜ Repository ์กฐ์ฐจ ์—†์–ด๋„ ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๋งคํ•‘ ํ…Œ์ด๋ธ”์—์„œ ๋งŽ์ด ์“ฐ์ž…๋‹ˆ๋‹ค.

 

 

๐Ÿ“š  ์˜ค๋Š˜์˜ ํšŒ๊ณ 

JPA ์–ด๋ ต๋‹ค ์–ด๋ ค์›Œ ํ•˜์ง€๋งŒ ๊ณ„์† ๋ฐ˜๋ณตํ•œ๋‹ค.