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

2023. 3. 1. 17:58ยทSpring/Spring JPA ๊ธฐ๋ณธ

 

์˜์†์„ฑ ์ „์ด 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

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring > Spring JPA ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 12. ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด(JPQL) ์†Œ๊ฐœ  (0) 2023.03.04
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 11. ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… / ๊ฐ’ ํƒ€์ž…  (0) 2023.03.03
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 9. ์ฆ‰์‹œ ๋กœ๋”ฉ๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ  (0) 2023.03.01
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 8. ํ”„๋ก์‹œ  (0) 2023.03.01
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 7. @MappedSuperclass  (0) 2023.02.28
'Spring/Spring JPA ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 12. ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด(JPQL) ์†Œ๊ฐœ
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 11. ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… / ๊ฐ’ ํƒ€์ž…
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 9. ์ฆ‰์‹œ ๋กœ๋”ฉ๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 8. ํ”„๋ก์‹œ
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 10. ์˜์†์„ฑ ์ „์ด CASCADE / ๊ณ ์•„ ๊ฐ์ฒด
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”