WEB/JPA

3. μžλ°” ORM ν‘œμ€€ JPA ν”„λ‘œκ·Έλž˜λ° - μ—”ν‹°ν‹° 맀핑

객체와 ν…Œμ΄λΈ” 맀핑

@Entity

- @Entityκ°€ μ •μ˜λ˜μ–΄μžˆλŠ” ν΄λž˜μŠ€λŠ” JPAκ°€ κ΄€λ¦¬ν•œλ‹€.

- κΈ°λ³Έ μƒμ„±μžκ°€ κΌ­ μžˆμ–΄μ•Ό ν•œλ‹€.

- 속성: name ->JPA에 μ‚¬μš©ν•  μ—”ν‹°ν‹° 이름을 μ§€μ •ν•œλ‹€, κΈ°λ³Έκ°’ : 클래슀 이름을 κ·ΈλŒ€λ‘œ μ‚¬μš©

 

@Table

- name, catalog, schema λ“±λ“±. . 

 

ν•„λ“œμ™€ 컬럼 맀핑

@Column

λ°μ΄ν„°λ² μ΄μŠ€ 컬럼λͺ…을 섀정해쀄 수 μžˆλ‹€.

unique(μ‹€λ¬΄μ—μ„œ 잘 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€ -> μœ λ‹ˆν¬ μ œμ•½μ‘°κ±΄ 이름을 μ„€μ •ν•  수 μ—†λ‹€ λŒ€μ‹  @Table(uniqueCons.. μ‚¬μš©), length λ“± μ„€μ •ν•  수 μžˆλ‹€. 

JPA κΈ°λ³Έ - κΉ€μ˜ν•œ / μΈν”„λŸ°

@Temporal

λ‚ μ§œ νƒ€μž… 맀핑

ν•˜μ§€λ§Œ LocalDate, LocalDateTime을 μ‚¬μš©ν•  λ•ŒλŠ” μƒλž΅ κ°€λŠ₯ν•˜λ‹€. 

 

@Enumerated

enum νƒ€μž… 맀핑

defaultκ°€ ORDINAL 인데 enum μˆœμ„œλ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•œλ‹€ ( μ‚¬μš©X -> μˆœμ„œκ°€ λ³€κ²½λ˜μ–΄λ„ 이전 λ°μ΄ν„°λŠ” 변경이 μ•ˆλ˜μ–΄μ„œ 문제 λ°œμƒ )

EnumType.STRING 은 enum 이름을 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•œλ‹€ (이것을 μ‚¬μš©)

 

@Lob

BLOB, CLOB 맀핑

 

 

@Transient

νŠΉμ • ν•„λ“œλ₯Ό μ»¬λŸΌμ— λ§€ν•‘ν•˜μ§€ μ•ŠμŒ (맀핑 λ¬΄μ‹œ)

λ©”λͺ¨λ¦¬μƒ λ‘œμ§μ—λ§Œ μ‚¬μš©ν•˜κ³  μ‹Άμ„λ•Œ μ‚¬μš©ν•œλ‹€.

 

κΈ°λ³Έ ν‚€ 맀핑

@Id

- 직접 ν• λ‹Ήν•  경우 @Id 

- μžλ™ μƒμ„±μ‹œ (@GeneratedValue) μΆ”κ°€ν•œλ‹€.

- strategy = GenerationType.AUTO  - 방언에 따라 μžλ™ 지정, κΈ°λ³Έκ°’

- strategy = GenerationType.IDENTITY - κΈ°λ³Έ ν‚€ 생성을 λ°μ΄ν„°λ² μ΄μŠ€μ— μœ„μž„ν•œλ‹€. (MYSQL)

 DB에 insertλ₯Ό 해봐야 id값을 μ•Œ 수 μ—†λ‹€. κ·Έλž˜μ„œ μ˜ˆμ™Έμ μœΌλ‘œ persist ν•  λ•Œ λ°”λ‘œ 쿼리λ₯Ό λ‚ λ¦°λ‹€. ( μ›λž˜λŠ” νŠΈλžœμ μ…˜μ‹œμ— 쿼리가 날라감 ) -> id κ°’ μ•Œ 수 있음

- strategy = GenerationType.SEQUENCE - λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν€€μŠ€ 였브젝트 μ‚¬μš© @SequenceGenerator ν•„μš” (ORACLE)

- strategy = GenerationType.TABLE - ν‚€ μƒμ„±μš© ν…Œμ΄λΈ” μ‚¬μš© @TableGenerator ν•„μš” (λͺ¨λ“  DB) -> μ„±λŠ₯이 λ³„λ‘œ...

 

-> ꢌμž₯ν•˜λŠ” μ‹λ³„μž μ „λž΅ 

- κΈ°λ³Έ ν‚€ μ œμ•½ 쑰건 : null X, 유일, λ³€ν•˜λ©΄ μ•ˆλœλ‹€.

- λ―Έλž˜κΉŒμ§€ 이 쑰건을 λ§Œμ‘±ν•˜λŠ” μžμ—°ν‚€λŠ” μ°ΎκΈ° μ–΄λ ΅κΈ° λ•Œλ¬Έμ— λŒ€λ¦¬ν‚€(λŒ€μ²΄ν‚€)λ₯Ό μ‚¬μš©ν•œλ‹€.

   μ˜ˆλ₯Ό λ“€μ–΄ μ£Όλ―Όλ“±λ‘λ²ˆν˜Έλ„ κΈ°λ³Έ ν‚€λ‘œ μ μ ˆν•˜μ§€ μ•Šλ‹€. 

   κΆŒμž₯ : Longν˜• + λŒ€μ²΄ν‚€ + ν‚€ μƒμ„±μ „λž΅ μ‚¬μš©

   λ•Œμ— 따라 λžœλ€κ°’, UUID λ₯Ό ꢌμž₯

 

연관관계 맀핑 : @ManyToONe, @JoinColumm λ“±

 

데이터 베이슀 μŠ€ν‚€λ§ˆ μžλ™ 생성

DDL을 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ μ‹œμ μ— μžλ™ 생성

ν…Œμ΄λΈ” μ€‘μ‹¬μ—μ„œ -> 객체 μ€‘μ‹¬μœΌλ‘œ

데이터 베이슀 방언을 ν™œμš©ν•˜μ—¬ μ μ ˆν•˜κ²Œ DDL을 μƒμ„±ν•œλ‹€

μ΄λ ‡κ²Œ μƒμ„±λœ DDL은 κ°œλ°œμ„œλ²„μ—μ„œλ§Œ μ‚¬μš©ν•˜κ³  μ μ ˆν•˜κ²Œ λ‹€λ“¬μ–΄μ„œ μš΄μ˜μ—μ„œ μ‚¬μš©ν•˜μž.

 

create > κΈ°μ‘΄ 데이터 μ‚­μ œ ν›„ λ‹€μ‹œ 생성

create-drop > κΈ°μ‘΄ 데이터 μ‚­μ œ ν›„ λ‹€μ‹œ 생성 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ’…λ£Œμ‹œ ν…Œμ΄λΈ” μ‚­μ œ

update > λ³€κ²½λœ λΆ€λΆ„λ§Œ μˆ˜μ • (alter) , μΆ”κ°€ν•˜λŠ”κ²ƒ 만 κ°€λŠ₯

validate  > 엔티티와 ν…Œμ΄λΈ”μ΄ μ •μƒλ§€ν•‘λ˜μ—ˆλŠ”μ§€ 확인해쀀닀.

none > μ‚¬μš©ν•˜μ§€ μ•ŠμŒ

 

운영 μž₯λΉ„μ—λŠ” μ ˆλŒ€ create, create-drop, update μ‚¬μš©ν•˜λ©΄ μ•ˆλœλ‹€.

개발 초기 -> create or update

ν…ŒμŠ€νŠΈ μ„œλ²„ -> update or validate

μŠ€ν…Œμ΄μ§•κ³Ό 운영 μ„œλ²„ -> validate or none

 

--> 둜컬PC μ™Έμ—λŠ” none or validate 만 μ‚¬μš©ν•˜κ³  ν…Œμ΄λΈ” μˆ˜μ •μ€ μ§μ ‘ν•œλ‹€.

 

 

 

λ°˜μ‘ν˜•