Spring/ORM

4. 엔티티 매핑

wch_t 2023. 9. 2. 01:01

1. 객체와 테이블 매핑

@Entity

- 데이터베이스 테이블과 매핑되는 객체

 

- 주의

   - 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)

   - final class, enum, interface, inner class, record 사용 X

   - 저장할 필드에 final 사용 X → 수정 불가

 

- 속성 : name

   - JPA에서 사용할 엔티티 이름을 지정

   - 기본값 : 클래스 이름을 그대로 사용(ex. Member)

   - 같은 클래스 이름이 없으면, 가급적 기본값을 사용한다.

 

 

 

@Table

- 엔티티와 매핑할 테이블 지정

 

- 속성

 

 

2. 데이터베이스 스키마 자동 생성

- DDL을 애플리케이션 실행 시점에 '자동 생성'

 

- 테이블 중심 → 객체 중심

 

- 데이터베이스 방언을 활용해서, 데이터베이스에 맞는 적절한 DDL 생성

 

- 이렇게 생성된 DDL은 개발 장비에서만 사용

   - 개발 초기 단계 : create, update

   - 테스트 서버 : update, validate

   - 스테이징∙운영 서버 : validate, none

 

      "절대 create, create-drop, update 사용하면 안된다."

 

 

 

속성

 

 

3. 필드와 컬럼 매핑

 

어노테이션 정리

 

@Column

 

@Enumerated

 

@Temporal

 

@Lob

 

Transient

 

4. 기본 키 매핑

@Id

- 데이터베이스 Primary Key와 매핑되는 객체

 

 

@GeneratedValue

- IDENTITY : 데이터베이스에 위임,

 

- SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용

   → @SequenceGenerator 필요

 

- TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용

   → @TableGenerator 필요

 

- AUTO : 방언에 따라 자동 지정, 기본값

 

권장. "Long형 + 대체키 + 키 생성전략 사용"

 

 

5. 데이터 중심 설계의 문제점

- 객체 설계를 테이블 설계에 맞춘 방식

 

- 테이블의 외래키(FK)를 객체에 그대로 가져옴

 

- 객체 그래프 탐색이 불가능

 

- 참조가 없으므로 UML도 잘못됨

 

테이블 설계