Spring/Spring JPA ๊ธฐ๋ณธ

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 10. ์˜์†์„ฑ ์ „์ด CASCADE / ๊ณ ์•„ ๊ฐ์ฒด

hello_u 2023. 3. 1. 17:58

 

์˜์†์„ฑ ์ „์ด CASCADE

 

ํŠน์ • ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์† ์ƒํƒœ๋กœ ๋งŒ๋“ค ๋•Œ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋„ ํ•จ๊ป˜ ์˜์† ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค . 

 

์˜ˆ) ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์ž์‹ ์—”ํ‹ฐํ‹ฐ๋„ ํ•จ๊ป˜ ์ €์žฅํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉ 

 

 

 

 

์ง€๊ธˆ ํ˜„์žฌ Parent์™€ child๋Š” ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„๋กœ ๋งบ์–ด์ง„ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

 

Parent parent = new Parent();
Child child1 = new Child();
Child child2 = new Child();

parent.addChild(child1);
parent.addChild(child2);

em.persist(parent);
em.persist(child1);
em.persist(child2);

 

์—ฌ๊ธฐ์„œ ์„ธ๊ฐ€์ง€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ชจ๋‘ ์˜์†ํ™” ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” em.persist()๋ฅผ 3๋ฒˆ ํ˜ธ์ถœํ•ด์„œ

 

Parent์™€ Child ๊ฐ๊ฐ ๋ชจ๋‘ ์˜์†ํ™” ์‹œ์ผœ์ฃผ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

 

์—ฌ๊ธฐ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜๋ฌธ์ด ๋“ญ๋‹ˆ๋‹ค.

 

Parent๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” Child ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ Parent๋ฅผ em.persist()ํ•  ๋•Œ ๊ฐ™์ด ์ง„ํ–‰ํ•˜๋ฉด ํŽธํ•˜์ง€ ์•Š์„๊นŒ?

 

์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ๋ฐ”๋กœ Cascade,์˜์†์„ฑ ์ „์ด์ž…๋‹ˆ๋‹ค.

 

 

@OneToMany(mappedBy = "parent",cascade = CascadeType.ALL)
private List<Child> childList = new ArrayList<>();

 

cascade = CascadeType.ALL ์„ค์ • 

 

em.persist(parent);
// em.persist(child1);
// em.persist(child2);

 

parent ๋งŒ persist() ํ•ด๋„ child ๋‘˜ ๋‹ค persist() ๋œ๋‹ค. 

 

Cascade ์˜๋ฏธ - “์—ฐ์‡„” ๋ฅผ ์ƒ๊ฐํ•˜์ž

 

 

Cascade์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด 6๊ฐ€์ง€์˜ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ALL
  • PERSIST
  • REMOVE
  • MERGE
  • REFERESH
  • DETACH

 

ํ•˜์ง€๋งŒ ์ •์ž‘ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์€ ALL ๋˜๋Š” PESIST์ž…๋‹ˆ๋‹ค.

 

ALL์˜ ๊ฒฝ์šฐ์˜ ์œ„์˜ ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ์˜์†์„ฑ์ด ์ „์ด๋˜๋Š” ๊ฒฝ์šฐ์ด๊ณ 

 

Persist์˜ ๊ฒฝ์šฐ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ €์žฅ๋ ๋•Œ๋งŒ ์—ฐ์‡„์ ์œผ๋กœ ์ €์žฅ๋˜๊ฒŒ ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

 

 

 

Cascade๋ฅผ ์–ธ์ œ ์จ์•ผ ํ•˜๋‚˜?

 

Cascade๋˜๋Š” ์—”ํ‹ฐํ‹ฐ์™€ Cascade๋ฅผ ์„ค์ •ํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์ด ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋น„์Šทํ•ด์•ผํ•œ๋‹ค.

 

Cascade๋˜๋Š” ์—”ํ‹ฐํ‹ฐ๊ฐ€ Cascade๋ฅผ ์„ค์ •ํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

( ๋‹จ์ผ ์†Œ์œ ์ž : child ๋ฅผ parent ๋งŒ ์†Œ์œ   )

 

 

 

๊ณ ์•„ ๊ฐ์ฒด

 

๋ถ€๋ชจ์™€ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ๋Š์–ด์ง„ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ณ ์•„๊ฐ์ฒด

 

@OneToMany(mappedBy = "parent",cascade = CascadeType.ALL,orphanRemoval = true)
private List<Child> childList = new ArrayList<>();

 

orphanRemoval=true : ๊ณ ์•„๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•ด์ฃผ๋Š” ์˜ต์…˜์„ ํ™œ์„ฑํ™”

 

parent1.getChildList().remove(0);
//์ž์‹ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ปฌ๋ ‰์…˜์—์„œ ์ œ๊ฑฐํ–ˆ๋‹ค 

 

 

delete ์ฟผ๋ฆฌ๊ฐ€ ๋‚˜๊ฐ€๊ฒŒ ๋œ๋‹ค

 

 

์ฃผ์˜์‚ฌํ•ญ

 

์ฐธ์กฐํ•˜๋Š” ๊ณณ์ด ํ•˜๋‚˜์ผ ๋•Œ๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค ! 

 

ํŠน์ • ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๊ฐœ์ธ ์†Œ์œ ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค ! 

 

๊ฐœ๋…์ ์œผ๋กœ ๋ถ€๋ชจ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์ž์‹์€ ๊ณ ์•„๊ฐ€ ๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ ๊ณ ์•„ ๊ฐ์ฒด ์ œ๊ฑฐ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด , ๋ถ€๋ชจ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ ์ž์‹๋„ ํ•จ๊ป˜ ์ œ๊ฑฐ๋œ๋‹ค.

 

์ด๊ฒƒ์€ CascadeType.REMOVE ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค . 

 

 

 

์˜์†์„ฑ ์ „์ด CASCADE + ๊ณ ์•„ ๊ฐ์ฒด , ์ƒ๋ช…์ฃผ๊ธฐ 

cascade = CascadeType.ALL,orphanRemoval = true

 

CascadeType.ALL + orphanRemoval=true ์ด๊ฒƒ์„ ๋‹ค ํ‚ค๋ฉด ๋ฌด์Šจ ์˜๋ฏธ์ผ๊นŒ? 

 

๋‘ ์˜ต์…˜์„ ๋ชจ๋‘ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ†ตํ•ด์„œ ์ž์‹์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

https://hongchangsub.com/jpa-cascade-2/

 

<JPA> ์•Œ๊ณ  ์“ฐ๋Š” Cascade(์˜์†์„ฑ ์ „์ด)

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์“ฐ๋ฉด์„œ๋„ ํ—ท๊ฐˆ๋ฆฌ๋˜ JPA์˜ Cascade ์˜ต์…˜์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.์ผ๋‹จ ๊ธฐ๋ณธ์ ์œผ๋กœ Cascade๋ผ๋Š” ์˜ต์…˜์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ๋ถ€ํ„ฐ ์•Œ์•„๋ด…์‹œ๋‹ค. ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด์‹œ์ฃ  @Setter @Getter @Entity

hongchangsub.com

 

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ

www.inflearn.com