-
[Spring JPA] 엔티티 매핑Spring/Spring JPA 2021. 6. 18. 17:24
객체와 테이블 매핑
@Entity
- @Entity가 붙은 클래스는 JPA가 관리한다
- 속성 : name
- JPA에서 사용할 엔티티 이름을 지정한다
- 같은 클래스 이름이 없으면 가급적 기본값을 사용한다
@Table
- @Table은 엔티티와 매핑할 테이블을 지정한다
- 속성 : name
- 매핑할 테이블의 이름을 지정한다
- 속성 : catalog
- 데이터베이스 catalog 매핑
- 속성 : schema
- 데이터베이스 schema 매핑
- 속성 : uniqueConstraints
- DDL 생성 시 유니크 제약 조건 생성
필드와 컬럼 매핑
@Column
- 필드와 매핑할 테이블의 컬럼을 매핑한다
- 기본값으로 필드의 이름을 사용한다
@Enumerated
- 자바의 enum 타입을 매핑할 때 사용한다
- ORDINAL 대신에 STRING을 사용해야 한다
@Temporal
- 날짜 타입을 매핑할 때 사용한다
- 속성 : value
- TemporalType.DATE : DB date 타입과 매핑 (연월)
- TemporalType.TIME : DB time 타입과 매핑 (연월
- TemporalType.TIMESTAMP : DB timestamp 타입과 매핑
@Lob
- DB의 BLOB, CLOB 타입과 매핑
- 매핑하는 필드 타입이 문자면 CLOB, 나머지는 BLOB과 매핑된다
@Transient
- 필드에서만 사용하고 싶은 경우 사용된다
- DB와 무관하게 메모리상에서 임시로 보관하고 싶을 때 사용한다
기본 키 매핑
직접 할당
- @Id : 코드레벨에서 직접 할당
자동 생성
- @GeneratedValue
- IDENTITY 전략
- 기본키 생성을 DB에 위임한다 (ex. AUTO_INCREMENT)
- em.persist() 시점에 즉시 INSERT SQL 쿼리 실행 후 식별자를 조회하여 영속성 컨텍스트에 저장한다
- SEQUENCE 전략
- DB가 관리하는 시퀀스 객체를 기본키로 사용한다
- 속성 : allocationSize
- 시퀀스 한 번 호출에 증가하는 수를 지정하여 성능 최적화에 사용된다
- 50으로 설정한 경우 DB는 50씩 증가하며 App에서는 1씩 증가한다
- TABLE 전략
- 키 생성 전용 테이블을 하나 만들어 DB 시퀀스를 흉내낸다
- 모든 DB에 적용할 수 있지만 성능 이슈가 발생한다
- AUTO(default)
- IDENTITY 전략
권장 식별자 전략
- null이 아니면서 유일하고 변하지 않아야 한다
- 일반적으로 이러한 자연키는 찾기 어려우므로 대리키를 사용한다
- Long형 + 대체키 사용 + 키 생성전략을 사용해야 한다
'Spring > Spring JPA' 카테고리의 다른 글
[Spring JPA] 영속성 컨텍스트의 특징 (0) 2021.06.14 [Spring JPA] 엔티티의 생명주기 (0) 2021.06.14 [Spring JPA] @어노테이션 정리 (0) 2021.06.14