지우쓰 개발일기
[JPA] Entity Mapping 본문
본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다.
자바 ORM 표준 JPA 프로그래밍
에이콘 오픈 소스 프로그래밍 시리즈. 이 책은 JPA 기초 이론과 핵심 원리, 그리고 실무에 필요한 성능 최적화 방법까지 JPA에 대한 모든 것을 다룬다.
www.aladin.co.kr
대표적인 Entity Mapping Annotation
-
객체와 테이블 매핑: @Entity, @Table
-
기본 키 매핑: @Id
-
필드와 컬럼 매핑: @Column
-
연관관계 매핑: @ManyToOne, @JoinColumn
- 접근 방식: @Access
@Entity
테이블과 매핑할 클래스 필수 지정
-
기본 생성자 필수
-
final, enum, interface, inner 클래스에는 사용 불가
-
필드에 final 사용 불가
속성 | 기능 | 기본값 |
name | JPA에서 사용할 엔티티 이름 | 클래스 이름 |
@Table
엔티티와 매핑할 테이블 지정
-
생략 시 엔티티 이름을 테이블 이름으로 사용
속성 | 기능 | 기본값 |
name | 매핑할 테이블 이름 | 엔티티 이름 |
catalog | catalog 기능이 있는 DB에 catalog 매핑 | |
schema | schema 기능이 있는 DB에 schema 매핑 | |
uniqueConstraints(DDL) | DDL 생성 시 uniqueConstraints 생성 |
@Column
필드와 매핑할 컬럼 지정
-
생략 시
-
자바 기본 타입: @Column 생략 시 not null / @Column 사용하고 nullable은 생략 시 nullable
-
객체 타입: 별도 nullable 생략 시 nullable
-
속성 | 기능 | 기본값 |
name | 매핑할 컬럼 이름 | 필드 이름 |
nullable(DDL) | null값 허용 여부 | true |
unique(DDL) | 한 컬럼에 uniqueConstraints |
|
columnDefinition(DDL) | DB 컬럼 정보 직접 지정 | 자바 타입 + 방언 정보를 사용해 적절히 생성 |
length(DDL) | String 길이 제약 조건 | 255 |
table | 매핑할 테이블 이름 | 기본 엔티티 테이블 |
cf.) 이름 매핑 전략
<property name="hibernate.ejb.naming_strategy"
value="org.hibernate.cfg.ImprovedNamingStrategy" />
→ 자바의 Camel 표기법을 DB의 언더스코어(_) 구분법으로 자동 매핑
@Enumerated
자바 enum 타입 매핑
속성 | 기능 | 기본값 |
value | - EnumType.ORDINAL: 순서 (숫자) - EnumType.String: 이름 (문자) |
EnumType.ORDINAL |
@Temporal
날짜(java.util.Date, java.util.Calendar) 타입 매핑
속성 | 기능 | 기본값 |
value | - TemporalType.DATE - TemporalType.TIME - TemporalType.TIMESTAMP |
필수 지정 필요 |
@Transient
매핑하지 않고 객체에 임시로 보관만 하는 필드
PK 매핑
persistence.xml
<property name="hibernate.id.new_generator_mappings" value="true" />
1. 직접할당 (@Id)
-
em.persist()로 엔티티 저장 전 기본 키 직접 할당
-
적용 가능 자바 타입
-
자바 기본형
-
자바 Wrapper형
-
String
-
java.util.Date / java.sql.Date
-
java.math.BigDecimal
-
java.math.BigInteger
-
2. 자동생성 (@Id + @GeneratedValue)
-
IDENTITY 전략
-
DB에 PK 생성 위임
-
@GeneratedValue(strategy = GenerationType.IDENTITY)
-
생성된 PK 값을 얻어오기 위해 쓰기 지연 없이 바로 Insert 후 DB 추가 조회
-
MySQL, PostgreSQL, SQL Server, DB2
-
-
SEQUENCE 전략 (p.135)
-
DB 시퀀스: 유일한 값을 순서대로 저장하는 DB object
-
Oracle, PostgreSQL, DB2, H2
-
(일단 넘어감! 나중에 돌아와서 봐야지..)
-
-
TABLE 전략
-
키 생성 전용 테이블을 만들어 시퀀스와 유사한 효과
-
(이것도 일단 넘어감! 나중에 꼭 돌아오자..)
-
-
AUTO 전략
-
위 세 전략 중 DB 방언에 따라 자동으로 선택
-
@Access
JPA가 엔티티에 접근하는 방식
접근 방식 | 기능 |
AccessType.PROPERTY | Getter로 접근 |
AccessType.FIELD | 필드에 직접 접근 (private 무관) |
'Spring Boot > JPA' 카테고리의 다른 글
[JPA] 영속성 전이, 고아 객체 (0) | 2020.09.13 |
---|---|
[JPA] Proxy, Eager Loading, Lazy Loading (0) | 2020.09.13 |
[JPA] @SecondaryTable (0) | 2020.09.13 |
[JPA] Join Table (0) | 2020.09.13 |
[JPA] 복합키와 식별관계 Mapping (0) | 2020.09.13 |