JPA Entity Mapping
@Entity
"엔티티"는 객체에서 부르는 이름으로, 보통 class와 같은 이름을 사용하기 때문에 값을 변경하지 않는다.
엔티티의 이름은 JQL에서 사용한다.
@Entity(name="변경할 엔티티명")을 통해서 엔티티명을 지정할 수 있다.
@Table
"릴레이션"에서 부르는 이름으로, @Entity의 이름이 기본값이며, SQL에서 사용한다.
@Table(name="DB Table명")을 통해서 Table과 맵핑할 수 있다.
@Id
- 엔티티의 주키(PK) 를 맵핑할 사용한다.
- Java의 모든 primitive 타입과 그 래퍼런스 타입을 사용할 수 있다.
- 복합키를 만드는 맵핑하는 방법도 있다. (@IdClass annotation 사용)
@GeneratedValue
- 주키의 생성 방법을 맵핑하는 annotation
- 생성전략과 생성기를 생성할 수 있다.
- 기본전략의 AUTO : 사용하는 DB에 따라 다르다.
- TABLE, SEQUENCE, IDENTITY중 하나
@Column
- unique : 유니크 값 여부 ( true | false )
- nullable : null값 허용 여부 ( true | false )
- length : 컬럼의 사이즈 설정 ( default : 255)
- columnDefinition : 컬럼의 타입와 기본값을 지정할 수 있다.
- @Column(columnDefinition = " varchar(500) default 'hello'")
@Temporal
- 날짜형 데이터를 맵핑하는 annotation
- 종류 : DATE / TIME / TIMESTAMP
@Transient
- DataBase Table의 컬럼과 맵핑하고 싶지 않을 경우에 사용한다.
Value Mapping
Value 타입의 종류
- default Type ( String, Date, Boolean ... )
- Composite Value Type
- Collection Value Type
Composite Value 타입 맵핑
Address의 street column을 home_street column으로 맵핑하여 사용하면, DDL 실행 시, home_street으로 테이블이 생성되는 것을 확인할 수 있다.
다:1 양방향 Mapping ( 1:N, N:1 )
양방향은 외래 키가 있는 쪽인 연관관계의 주인이다.
1:N 과 N:1 항상 N쪽에 외래 키가 있다.
JPA는 외래 키를 관리할 때, 연관관계의 주인만 사용한다.
주인이 아닌 경우에는 조회를 위한 JPQL이나 객체 그래프를 탐색할 때 사용한다.
양방향 연관관계는 항상 서로를 참조해야 한다.
양방향 연관관계는 항상 서로를 참조해야 하며, 어느 한쪽만 참조할 경우 양방향 연관관계가 성립되지 않는다.
API호출에 대한 데이터의 결과가 아래와 같다고 할 경우, Entity의 연관관계 설정은 그림과 같다.
위 entity들을 확인해보면, TestEntity.master가 연관관계의 주인이다.