Skip to content

Latest commit

Β 

History

History
63 lines (49 loc) Β· 3.27 KB

EntityMapping.md

File metadata and controls

63 lines (49 loc) Β· 3.27 KB

[μžλ°” ORM ν‘œμ€€ JPA ν”„λ‘œκ·Έλž˜λ°] Entity 맀핑

@Entity

JPAλ₯Ό 톡해 ν…Œμ΄λΈ”κ³Ό 맀핑할 ν΄λž˜μŠ€λŠ” @Entityλ₯Ό ν•„μˆ˜λ‘œ λΆ™μ—¬μ•Όν•œλ‹€.

μ£Όμ˜μ‚¬ν•­

  1. κΈ°λ³Έ μƒμ„±μžλŠ” ν•„μˆ˜μ΄λ‹€. (νŒŒλΌλ―Έν„°κ°€ μ—†λŠ” public, protected μƒμ„±μž)
  2. final 클래슀, enum, interface, inner ν΄λž˜μŠ€μ—λŠ” μ‚¬μš©ν•  수 μ—†λ‹€.
  3. μ €μž₯ν•  ν•„λ“œμ— final을 μ‚¬μš©ν•˜λ©΄ μ•ˆλœλ‹€.

JPAκ°€ μ—”ν‹°ν‹° 객체λ₯Ό 생성할 λ•Œ κΈ°λ³Έ μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ, κΈ°λ³Έ μƒμ„±μžλŠ” λ°˜λ“œμ‹œ μžˆμ–΄μ•Όν•œλ‹€.

DB μŠ€ν‚€λ§ˆ μžλ™ 생성

JPAλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” κΈ°λŠ₯을 μ§€μ›ν•œλ‹€. 클래슀의 맀핑 정보λ₯Ό 보면 μ–΄λ–€ ν…Œμ΄λΈ”μ— μ–΄λ–€ μ»¬λŸΌμ„ μ‚¬μš©ν•˜λŠ”μ§€ μ•Œ 수 μžˆλŠ”λ°, JPAλŠ” 이 맀핑정보와 DB 방언을 μ°Έκ³ ν•˜μ—¬ DB μŠ€ν‚€λ§ˆλ₯Ό μƒμ„±ν•œλ‹€.

μŠ€ν‚€λ§ˆ μžλ™ 생성 κΈ°λŠ₯ μ‚¬μš©λ²•

yaml일 경우 λ‹€μŒκ³Ό 같이 속성을 지정해쀀닀.

spring:
    jpa:
        generate-ddl:true
        hibernate:
            ddl-auto: true

속성

μ˜΅μ…˜ μ„€λͺ…
create κΈ°μ‘΄ ν…Œμ΄λΈ”μ„ μ‚­μ œν•œ λ’€ μƒˆλ‘œ μƒμ„±ν•œλ‹€.
create-drop create 속성에 μΆ”κ°€λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ’…λ£Œν•  λ•Œ μƒμ„±ν•œ DDL을 μ œκ±°ν•œλ‹€. (DROP + CREATE + DROP)
update DB ν…Œμ΄λΈ”κ³Ό μ—”ν‹°ν‹° 맀핑정보λ₯Ό λΉ„κ΅ν•΄μ„œ λ³€κ²½ μ‚¬ν•­λ§Œ μˆ˜μ •ν•œλ‹€.
validate DB ν…Œμ΄λΈ”κ³Ό μ—”ν‹°ν‹° 맀핑정보λ₯Ό λΉ„κ΅ν•΄μ„œ 차이가 있으면 κ²½κ³ λ₯Ό 남기고 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€. 이 경우 DDL을 μˆ˜μ •ν•˜μ§€ μ•ŠλŠ”λ‹€.

μ£Όμ˜μ‚¬ν•­

운영 μ„œλ²„μ—μ„œ create, create-drop, update 처럼 DDL을 μˆ˜μ •ν•˜λŠ” μ˜΅μ…˜μ€ μ ˆλŒ€ μ‚¬μš©ν•˜λ©΄ μ•ˆλœλ‹€. 였직 개발 μ„œλ²„λ‚˜ 개발 λ‹¨κ³„μ—μ„œλ§Œ μ‚¬μš©ν•΄μ•Όν•œλ‹€. 이 μ˜΅μ…˜μ€ μš΄μ˜μ€‘μΈ DB의 ν…Œμ΄λΈ”μ΄λ‚˜ μ»¬λŸΌμ„ μ‚­μ œν•  수 μžˆλ‹€.

κ°œλ°œν™˜κ²½μ— λ”°λ₯Έ μΆ”μ²œ μ „λž΅

  • 개발 초기 단계 : create λ˜λŠ” update
  • μ΄ˆκΈ°ν™” μƒνƒœλ‘œ μžλ™ν™”λœ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” 개발자 ν™˜κ²½κ³Ό CI μ„œλ²„λŠ” create λ˜λŠ” create-drop
  • ν…ŒμŠ€νŠΈ μ„œλ²„λŠ” update λ˜λŠ” validate
  • μŠ€ν…Œμ΄μ§•κ³Ό 운영 μ„œλ²„λŠ” validate λ˜λŠ” none

DDL 생성 κΈ°λŠ₯

νšŒμ› 이름은 ν•„μˆ˜λ‘œ μž…λ ₯λ˜μ–΄μ•Ό ν•˜κ³ , 10자λ₯Ό μ΄ˆκ³Όν•˜λ©΄ μ•ˆλœλ‹€λŠ” μ œμ•½μ‘°κ±΄μ΄ μžˆλ‹€κ³  κ°€μ •ν•˜κ³ , μŠ€ν‚€λ§ˆ μžλ™ μƒμ„±ν•˜κΈ°λ₯Ό 톡해 λ§Œλ“€μ–΄μ§€λŠ” DDL에 이 μ œμ•½μ‘°κ±΄μ„ μΆ”κ°€ν•΄λ³΄μž.

@Entity
@Table(name="MEMBER")
public class Member {
    
    @Id
    @Column(name = "ID")
    private String id;

    @Column(name = "NAME", nullable = false, length = 10)
    private String username;

    // ...
}

@Column 맀핑 μ •λ³΄μ˜ nullable 속성 값을 false둜 μ§€μ •ν•˜λ©΄ μžλ™ μƒμ„±λ˜λŠ” DDL에 not null μ œμ•½μ‘°κ±΄μ„ μΆ”κ°€ν•  수 μžˆλ‹€. 그리고 length 속성 값을 μ‚¬μš©ν•˜λ©΄ μžλ™ μƒμ„±λ˜λŠ” DDL에 문자의 크기λ₯Ό 지정할 수 μžˆλ‹€.

@Column의 μ΄λŸ¬ν•œ 속성듀은 (length, nullable ...) 단지 DDL을 μžλ™ 생성할 λ•Œλ§Œ μ‚¬μš©λ˜κ³ , JPA의 μ‹€ν–‰ λ‘œμ§μ—λŠ” 영ν–₯을 주지 μ•ŠλŠ”λ‹€. λ”°λΌμ„œ μŠ€ν‚€λ§ˆ μžλ™ 생성 κΈ°λŠ₯을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  직접 DDL을 λ§Œλ“œλŠ” κ²½μš°μ—λŠ” μ‚¬μš©ν•  μ΄μœ κ°€ μ—†λ‹€. κ·Έλž˜λ„ 이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ κ°œλ°œμžκ°€ μ—”ν‹°ν‹°λ§Œ 보고도 μ†μ‰½κ²Œ λ‹€μ–‘ν•œ μ œμ•½μ‘°κ±΄μ„ νŒŒμ•…ν•  수 μžˆλŠ” μž₯점이 μžˆλ‹€.