Skip to content

Latest commit

ย 

History

History
212 lines (153 loc) ยท 10.3 KB

07.md

File metadata and controls

212 lines (153 loc) ยท 10.3 KB

07. ๊ณ ๊ธ‰ ๋งคํ•‘

๐Ÿฉ ์ด ๊ธ€์€ ๊น€์˜ํ•œ๋‹˜์˜ '์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๊ฒƒ์ž„์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.


7.1 ์ƒ์† ๊ด€๊ณ„ ๋งคํ•‘

  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์ƒ์†์ด๋ผ๋Š” ๊ฐœ๋…์ด ์—†์Œ
    ํ•˜์ง€๋งŒ, "์Šˆํผํƒ€์ž…, ์„œ๋ธŒํƒ€์ž… ๊ด€๊ณ„"๋ผ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์œ ์‚ฌ

  • ์Šˆํผํƒ€์ž… ์„œ๋ธŒํƒ€์ž… ๋…ผ๋ฆฌ ๋ชจ๋ธ์„ ์‹ค์ œ ํ…Œ์ด๋ธ”๋กœ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌ

    1. ๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ”๋กœ ๋ณ€ํ™˜

      ๋ชจ๋“  ๋ชจ๋ธ์„ ํ…Œ์ด๋ธ”๋กœ ๋งŒ๋“ค๊ณ  ์กฐ์ธ์„ ์‚ฌ์šฉ(์กฐ์ธ ์ „๋žต)

    2. ํ†ตํ•ฉ ํ…Œ์ด๋ธ”๋กœ ๋ณ€ํ™˜

      ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋งŒ ์‚ฌ์šฉ(๋‹จ์ผ ํ…Œ์ด๋ธ” ์ „๋žต)

    3. ์„œ๋ธŒ ํƒ€์ž… ํ…Œ์ด๋ธ”๋กœ ๋ณ€ํ™˜

      ์„œ๋ธŒ ํƒ€์ž…๋ณ„๋กœ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉ(๊ตฌํ˜„ ํด๋ž˜์Šค๋งˆ๋‹ค ํ…Œ์ด๋ธ” ์ „๋žต)

7.1.1 ์กฐ์ธ ์ „๋žต

  • ์—”ํ‹ฐํ‹ฐ ๊ฐ๊ฐ์„ ๋ชจ๋‘ ํ…Œ์ด๋ธ”๋กœ ๋งŒ๋“ค๊ณ  ์ž์‹ ํ…Œ์ด๋ธ”์ด ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค๋ฅผ ๋ฐ›์•„ ๊ธฐ๋ณธํ‚ค + ์™ธ๋ž˜ํ‚ค๋กœ ์‚ฌ์šฉ
    ๋”ฐ๋ผ์„œ ์กฐํšŒ์‹œ ์กฐ์ธ์„ ๋งŽ์ด ์‚ฌ์šฉ
  • ํ…Œ์ด๋ธ”์—๋Š” ํƒ€์ž…์˜ ๊ฐœ๋…์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€
  • @Inheritance(strategy = InheritanceType.JOINED) ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์กฐ์ธ ์ „๋žต์„ ์‚ฌ์šฉ
  • @DiscriminatorColumn ์„ ํ†ตํ•ด ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ž์‹ ํ…Œ์ด๋ธ”์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์ปฌ๋Ÿผ์„ ์ง€์ •
    ๊ธฐ๋ณธ๊ฐ’์€ DTYPE
  • @DiscriminatorValue ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ, ๊ตฌ๋ถ„ ์ปฌ๋Ÿผ์— ์ž…๋ ฅ๋  ๊ฐ’์„ ์ง€์ •
  • ์ž์‹ ํ…Œ์ด๋ธ”์€ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ID ์ปฌ๋Ÿผ๋ช…์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ
    ๋งŒ์•ฝ ์ด๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด @PrimaryKeyJoinColumn์„ ์‚ฌ์šฉ
  • ์žฅ์ 
    • ํ…Œ์ด๋ธ”์˜ ์ •๊ทœํ™”
    • ์™ธ๋ž˜ํ‚ค ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ
    • ์ €์žฅ๊ณต๊ฐ„์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ
  • ๋‹จ์ 
    • ์กฐํšŒ์‹œ ์กฐ์ธ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ
    • ์กฐํšŒ ์ฟผ๋ฆฌ ๋ณต์žก
    • ๋ฐ์ดํ„ฐ ๋“ฑ๋ก์‹œ INSERT SQL์ด ๋‘๋ฒˆ ์‹คํ–‰

7.1.2 ๋‹จ์ผ ํ…Œ์ด๋ธ” ์ „๋žต

  • ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์กฐ์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์กฐํšŒ(๊ฐ€์žฅ ๋น ๋ฆ„)
  • ๊ตฌ๋ถ„ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ์ž์‹์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ์ง€ ํŒŒ์•…(๊ตฌ๋ถ„ ์ปฌ๋Ÿผ ์‚ฌ์šฉ ํ•„์ˆ˜)
  • ์ž์‹ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋งคํ•‘ํ•œ ์ปฌ๋Ÿผ์€ ๋ชจ๋‘ null ์„ ํ—ˆ์šฉํ•ด์•ผ ํ•จ
  • @Inheritance(strategy = InheritanceType.SINGLE_TABLE) ์„ ์ž‘์„ฑํ•˜์—ฌ ์‚ฌ์šฉ
  • @DiscriminatorValue๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์œผ๋กœ ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„์„ ์‚ฌ์šฉ
  • ์žฅ์ 
    • ์กฐ์ธ์ด ์—†์–ด ์ผ๋ฐ˜์ ์œผ๋กœ ์กฐํšŒ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜
    • ์กฐํšŒ ์ฟผ๋ฆฌ๊ฐ€ ๋‹จ์ˆœ
  • ๋‹จ์ 
    • ์ž์‹ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋งคํ•‘ํ•œ ์ปฌ๋Ÿผ์€ ๋ชจ๋‘ null ํ—ˆ์šฉ
    • ๋‹จ์ผ ํ…Œ์ด๋ธ”์— ๋ชจ๋“  ๊ฒƒ์„ ์ €์žฅํ•˜๋ฏ€๋กœ ๊ต‰์žฅํžˆ ์ปค์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์กฐํšŒ ์„ฑ๋Šฅ์— ์ €ํ•˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ์Œ

7.1.3 ๊ตฌํ˜„ ํด๋ž˜์Šค๋งˆ๋‹ค ํ…Œ์ด๋ธ” ์ „๋žต

  • ์ž์‹ ์—”ํ‹ฐํ‹ฐ๋งˆ๋‹ค ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๊ณ  ๊ฐ๊ฐ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ์ด ๋ชจ๋‘ ์กด์žฌ
    ๋”ฐ๋ผ์„œ ๊ตฌ๋ถ„ ์ปฌ๋Ÿผ์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ
  • @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์‚ฌ์šฉ
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š” ์ „๋žต
  • ์žฅ์ 
    • ์„œ๋ธŒ ํƒ€์ž…์„ ๊ตฌ๋ถ„ํ•ด์„œ ์ฒ˜๋ฆฌํ•  ๋•Œ ํšจ๊ณผ์ 
    • not null ์ œ์•ฝ์กฐ๊ฑด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋‹จ์ 
    • ์—ฌ๋Ÿฌ ์ž์‹ ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜์—ฌ ์กฐํšŒํ•  ๋•Œ ์„ฑ๋Šฅ ์ €ํ•˜
    • ์ž์‹ ํ…Œ์ด๋ธ”์„ ํ†ตํ•ฉํ•ด์„œ ์ฟผ๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์›€

7.2 @MappedSuperclass

  • ๋ถ€๋ชจ ํด๋ž˜์Šค๋Š” ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•˜์ง€ ์•Š๊ณ  ์ƒ์† ๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค์—๊ฒŒ ๋งคํ•‘ ์ •๋ณด๋งŒ ์ œ๊ณตํ•  ๋•Œ ์‚ฌ์šฉ
  • ์ถ”์ƒ ํด๋ž˜์Šค์™€ ๋น„์Šท(์‹ค์ œ ํ…Œ์ด๋ธ”์—๋Š” ๋งคํ•‘์ด ์•ˆ๋˜๊ณ  ์ •๋ณด๋งŒ ์ œ๊ณต)
  • ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ๋ฌผ๋ ค๋ฐ›์€ ๋งคํ•‘ ์ •๋ณด๋ฅผ ์žฌ์ •์˜ ํ•˜๋ ค๋ฉด @AttributeOverrides ํ˜น์€ @Attributeoverride๋ฅผ ์‚ฌ์šฉ
  • ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๋ฉด @AssociationOverrides ํ˜น์€ @AsoociationOverride๋ฅผ ์‚ฌ์šฉ
  • @MappedSuperclass๋ฅผ ์ง€์ •ํ•œ ํด๋ž˜์Šค๋Š” ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์—”ํ‹ฐํ‹ฐ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•œ ์กฐํšŒ๋‚˜ JPQL์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
  • ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๊ธธ ๊ถŒ์žฅ

7.3 ๋ณตํ•ฉ ํ‚ค์™€ ์‹๋ณ„ ๊ด€๊ณ„ ๋งคํ•‘

7.3.1 ์‹๋ณ„ ๊ด€๊ณ„ VS ๋น„์‹๋ณ„ ๊ด€๊ณ„

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ์‚ฌ์ด์— ๊ด€๊ณ„์—์„œ ์™ธ๋ž˜ ํ‚ค๊ฐ€ ๊ธฐ๋ณธ ํ‚ค์— ํฌํ•จ๋˜๋Š”์ง€์— ๋”ฐ๋ผ ์‹๋ณ„ ๊ด€๊ณ„์™€ ๋น„์‹๋ณ„ ๊ด€๊ณ„๋กœ ๊ตฌ๋ถ„

  • ์‹๋ณ„ ๊ด€๊ณ„

    ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ๋‚ด๋ ค๋ฐ›์•„ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค + ์™ธ๋ž˜ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๊ณ„

  • ๋น„์‹๋ณ„ ๊ด€๊ณ„(์ตœ๊ทผ ์ถ”์„ธ)

    ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ๋ฐ›์•„ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๊ณ„

    ์™ธ๋ž˜ ํ‚ค์— NULL์„ ํ—ˆ์šฉํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ํ•„์ˆ˜์  ๋น„์‹๋ณ„ ๊ด€๊ณ„์™€ ์„ ํƒ์  ๋น„์‹๋ณ„ ๊ด€๊ณ„๋กœ ๋‚˜๋ˆ”

    • ํ•„์ˆ˜์  ๋น„์‹๋ณ„ ๊ด€๊ณ„

      ์™ธ๋ž˜ ํ‚ค์— NULL์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ, ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ๋งบ์–ด์•ผ ํ•จ

    • ์„ ํƒ์  ๋น„์‹๋ณ„ ๊ด€๊ณ„

      ์™ธ๋ž˜ ํ‚ค์— NULL์„ ํ—ˆ์šฉ, ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งบ์„์ง€๋ฅผ ์„ ํƒ ๊ฐ€๋Šฅ

7.3.2 ๋ณตํ•ฉ ํ‚ค: ๋น„์‹๋ณ„ ๊ด€๊ณ„ ๋งคํ•‘

  • ๋‘˜ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ณตํ•ฉ ๊ธฐ๋ณธ ํ‚ค๋Š” ๋‹จ์ˆœํžˆ @Id ๋กœ๋งŒ ๋งคํ•‘ํ•œ๋‹ค๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒ
    ์ด๋ฅผ JPA์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ„๋„์˜ ์‹๋ณ„์ž ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑ
  • ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ณด๊ด€ํ•  ๋•Œ ์—”ํ‹ฐํ‹ฐ์˜ ์‹๋ณ„์ž๋ฅผ ํ‚ค๋กœ ์‚ฌ์šฉ
    ์‹๋ณ„์ž๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด equals์™€ hashCode๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™๋“ฑ์„ฑ ๋น„๊ต
    ๋งŒ์•ฝ ์‹๋ณ„์ž ํ•„๋“œ๊ฐ€ 2๊ฐœ๋ผ๋ฉด ๋ณ„๋„์˜ ์‹๋ณ„์ž ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  equals์™€ hashCode๋ฅผ ๊ตฌํ˜„
  • ๋ณตํ•ฉ ํ‚ค ์ง€์›์„ ์œ„ํ•ด @IdClass์™€ @EmbeddedId๋ฅผ ์ œ๊ณต
  • @IdClass๋ฅผ ์‚ฌ์šฉ์‹œ ์‹๋ณ„์ž ํด๋ž˜์Šค๋Š” ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž์ถค)
    • ์‹๋ณ„์ž ํด๋ž˜์Šค์˜ ์†์„ฑ๋ช…๊ณผ ์—”ํ‹ฐํ‹ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‹๋ณ„์ž ์†์„ฑ๋ช…์ด ๊ฐ™์•„์•ผ ํ•จ
    • Serailizable ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
    • equals, hashCode ๊ตฌํ˜„
    • ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์กด์žฌ
    • public
  • @EmbeddedId๋ฅผ ์‚ฌ์šฉ์‹œ ์‹๋ณ„์ž ํด๋ž˜์Šค๋Š” ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑ(๊ฐ์ฒด ์ง€ํ–ฅ์— ๋งž์ถค)
    • @Embeddable ์–ด๋…ธํ…Œ์ด์…˜
    • Serializable ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
    • equals, hashCode ๊ตฌํ˜„
    • ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์กด์žฌ
    • public

7.3.3 ๋ณตํ•ฉ ํ‚ค: ์‹๋ณ„ ๊ด€๊ณ„ ๋งคํ•‘

  • @IdClass์™€ @EmbeddedId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹๋ณ„์ž๋ฅผ ๋งคํ•‘
  • @IdClass๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์‹๋ณ„ ๊ด€๊ณ„๋Š” ๊ธฐ๋ณธ ํ‚ค์™€ ์™ธ๋ž˜ ํ‚ค๋ฅผ ๊ฐ™์ด ๋งคํ•‘ํ•˜๋ฏ€๋กœ ์‹๋ณ„์ž ๋งคํ•‘์ธ @Id์™€ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์ธ @ManyToOne์„ ์‚ฌ์šฉ
  • @EmbeddedId์˜ ๊ฒฝ์šฐ, @MapsId(์™ธ๋ž˜ ํ‚ค์™€ ๋งคํ•‘ํ•œ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๊ธฐ๋ณธ ํ‚ค์—๋„ ๋งคํ•‘)๋ฅผ ์‚ฌ์šฉ

7.3.4 ๋น„์‹๋ณ„ ๊ด€๊ณ„๋กœ ๊ตฌํ˜„

  • ๋ณตํ•ฉ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋งคํ•‘๋„ ์‰ฝ๊ณ  ์ฝ”๋“œ๋„ ๋‹จ์ˆœ, ๋ณตํ•ฉ ํ‚ค ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑ X

7.3.5 ์ผ๋Œ€์ผ ์‹๋ณ„ ๊ด€๊ณ„

  • ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์œผ๋กœ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’๋งŒ ์‚ฌ์šฉ
    ๋”ฐ๋ผ์„œ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ๋ณตํ•ฉ ํ‚ค๊ฐ€ ์•„๋‹ˆ๋ฉด ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๋Š” ๋ณตํ•ฉ ํ‚ค๋กœ ๊ตฌ์„ฑ X

7.3.6 ์‹๋ณ„, ๋น„์‹๋ณ„ ๊ด€๊ณ„์˜ ์žฅ๋‹จ์ 

  • ์‹๋ณ„ ๊ด€๊ณ„๋Š” ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ž์‹ ํ…Œ์ด๋ธ”๋กœ ์ „ํŒŒํ•˜๋ฉด์„œ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค ์ปฌ๋Ÿผ์ด ์ ์  ๋Š˜์–ด๋‚จ
    ์ด๋Š” ์กฐ์ธ์‹œ์— SQL์ด ๋ณต์žกํ•ด์ง€๊ณ  ๊ธฐ๋ณธ ํ‚ค ์ธ๋ฑ์Šค๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค์งˆ ์ˆ˜ ์žˆ์Œ
  • ์‹๋ณ„ ๊ด€๊ณ„๋Š” 2๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ํ•ฉํ•ด์„œ ๋ณตํ•ฉ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ
  • ์‹๋ณ„ ๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ธฐ๋ณธ ํ‚ค๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ์ž์—ฐ ํ‚ค ์ปฌ๋Ÿผ์„ ์กฐํ•ฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ
    ๋ฐ˜๋ฉด ๋น„์‹๋ณ„ ๊ด€๊ณ„์˜ ๊ธฐ๋ณธ ํ‚ค๋Š” ๋น„์ฆˆ๋‹ˆ์Šค์™€ ์ „ํ˜€ ๊ด€๊ณ„์—†๋Š” ๋Œ€๋ฆฌ ํ‚ค๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉ
    ๋น„์ฆˆ๋‹ˆ์Šค์™€ ๊ด€๋ จ๋˜๋ฉด ์–ธ์  ๊ฐ€๋Š” ๋ณ€ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์ƒ์†์ด ์—ฌ๋Ÿฌ๋ฒˆ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณ€๊ฒฝํ•˜๊ธฐ๊ฐ€ ํž˜๋“ฌ
  • ์‹๋ณ„ ๊ด€๊ณ„๋Š” ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋น„์‹๋ณ„ ๊ด€๊ณ„๋ณด๋‹ค ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๊ฐ€ ์œ ์—ฐํ•˜์ง€ X
  • ์ผ๋Œ€์ผ ๊ด€๊ณ„๋ฅผ ์ œ์™ธํ•˜๊ณ  ์‹๋ณ„ ๊ด€๊ณ„๋Š” 2๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ๋ฌถ์€ ๋ณตํ•ฉ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ณ„๋„์˜ ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•œ๋ฐ ์ด์— ๋…ธ๋ ฅ์ด ๋” ํ•„์š”
  • ๋น„์‹๋ณ„ ๊ด€๊ณ„๋Š” ์ฃผ๋กœ ๋Œ€๋ฆฌ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

7.4 ์กฐ์ธ ํ…Œ์ด๋ธ”

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์—์„œ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ 2๊ฐ€์ง€

    • ์กฐ์ธ ์ปฌ๋Ÿผ ์‚ฌ์šฉ(์™ธ๋ž˜ ํ‚ค)

      ๋งŒ์•ฝ ๊ด€๊ณ„๋ฅผ ๋งบ์€ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ํ•„์ˆ˜๊ฐ€ ์•„๋‹ ๋•Œ๋Š” null์„ ํ—ˆ์šฉํ•˜๋Š” ์„ ํƒ์  ๋น„์‹๋ณ„ ๊ด€๊ณ„๊ฐ€ ๋จ
      ๋”ฐ๋ผ์„œ ์™ธ๋ถ€ ์กฐ์ธ์„ ์‚ฌ์šฉ

    • ์กฐ์ธ ํ…Œ์ด๋ธ” ์‚ฌ์šฉ(ํ…Œ์ด๋ธ” ์‚ฌ์šฉ)

      ์กฐ์ธ ํ…Œ์ด๋ธ”์€ ๋‘ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌ
      ๋”ฐ๋ผ์„œ ๊ฐ ํ…Œ์ด๋ธ”์—๋Š” ์™ธ๋ž˜ ํ‚ค ์ปฌ๋Ÿผ์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ

      ํฐ ๋‹จ์ ์€ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ๊ด€๋ฆฌํ•  ํ…Œ์ด๋ธ”์ด ๋Š˜๊ณ  ๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋ ค๋ฉด ์กฐ์ธ ํ…Œ์ด๋ธ”๊นŒ์ง€ ์ถ”๊ฐ€ ์กฐ์ธ์„ ํ•ด์•ผ ํ•จ

  • ์กฐ์ธ ์ปฌ๋Ÿผ์˜ ๊ฒฝ์šฐ, @JoinColumn์œผ๋กœ ๋งคํ•‘, ์กฐ์ธ ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ, @JoinTable๋กœ ๋งคํ•‘

  • ์กฐ์ธ ํ…Œ์ด๋ธ”์€ ์ฃผ๋กœ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ์ผ๋Œ€๋‹ค์™€ ๋‹ค๋Œ€์ผ๋กœ ํ’€์–ด๋‚ด๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ ์‚ฌ์šฉ(์ผ๋Œ€์ผ, ์ผ๋Œ€๋‹ค, ๋‹ค๋Œ€์ผ์—์„œ๋„ ์‚ฌ์šฉ)

  • ์กฐ์ธ ํ…Œ์ด๋ธ”์— ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜๋ฉด @JoinTable ์ „๋žต์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
    ๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋งŒ๋“ค์–ด ์กฐ์ธ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘

7.4.1 ์ผ๋Œ€์ผ ์กฐ์ธ ํ…Œ์ด๋ธ”

  • ์กฐ์ธ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค ์ปฌ๋Ÿผ ๊ฐ๊ฐ์— ์ด 2๊ฐœ์˜ ์œ ๋‹ˆํฌ ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑธ์–ด์•ผ ํ•จ
  • @JoinTable ์†์„ฑ
    • name : ๋งคํ•‘ํ•  ์กฐ์ธ ํ…Œ์ด๋ธ” ์ด๋ฆ„
    • joinColumns : ํ˜„์žฌ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์™œ๋ž˜ ํ‚ค
    • inverseJoinColumns : ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ ํ‚ค

7.4.2 ์ผ๋Œ€๋‹ค ์กฐ์ธ ํ…Œ์ด๋ธ”

  • ์กฐ์ธ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์ค‘ ๋‹ค์ชฝ๊ณผ ๊ด€๋ จ๋œ ์ปฌ๋Ÿผ์— ์œ ๋‹ˆํฌ ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ฑธ์–ด์•ผ ํ•จ(๋‹ค ์ชฝ์˜ ID๋ฅผ PK๋กœ ์‚ฌ์šฉ)

7.4.3 ๋‹ค๋Œ€์ผ ์กฐ์ธ ํ…Œ์ด๋ธ”

  • ์ผ๋Œ€๋‹ค ์กฐ์ธ ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์Œ

7.4.4 ๋‹ค๋Œ€๋‹ค ์กฐ์ธ ํ…Œ์ด๋ธ”

  • ์กฐ์ธ ํ…Œ์ด๋ธ”์˜ ๋‘ ์ปฌ๋Ÿผ์„ ํ•ฉํ•ด ํ•˜๋‚˜์˜ ๋ณตํ•ฉ ์œ ๋‹ˆํฌ ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑธ์–ด์•ผ ํ•จ

7.5 ์—”ํ‹ฐํ‹ฐ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” ๋งคํ•‘

  • @SecondaryTable์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ์—”ํ‹ฐํ‹ฐ์— ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ๋งคํ•‘
  • @SecondaryTable ์†์„ฑ
    • name : ๋งคํ•‘ํ•  ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„
    • pkJoinColumns : ๋งคํ•‘ํ•  ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค ์ปฌ๋Ÿผ ์†์„ฑ
  • @SecondaryTable๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜์˜ ์—”ํ‹ฐํ‹ฐ์— ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ…Œ์ด๋ธ”๋‹น ํ•˜๋‚˜์˜ ์—”ํ‹ฐํ‹ฐ์— ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ
  • ํ•ด๋‹น ๋ฐฉ๋ฒ•์€ ํ•ญ์ƒ ๋‘ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๋ฏ€๋กœ ์ตœ์ ํ™” ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›€