엔티티 매핑
엔티티 매핑
- 객체와 테이블 매핑: @Entity, @Table
- 필드와 칼럼 매핑: @Column
- 기본키 매핑: @Id
- 연관관계 매핑: @ManyToOne, @JoinColumn
@Entity(name="text")
- JPA에서 사용할 엔티티 이름을 지정한다.
- 기본값으로 Class 이름을 사용한다.
@Table
- 엔티티와 매핑할 테이블을 지정한다.
속성 | 기능 | 기본값 |
name | 매핑할 테이블 이름 | 엔티티 이름을 사용 |
catalog | 데이터베이스 catalog 매핑 | |
schema | 데이터베이스 schema 매핑 | |
uniqueConstraints(DDL) | DDL 생성 시 유니크 제약 조건 생성 |
@Entity
@Table(name = "BOX") // 테이블이 BOX로 만들어 진다.
public class Item{}
데이터베이스 스키마 자동 생성
- 개발 초기단계에는 create, update, create-drop을 사용한다.
- 테스트 서버에는 update, validate를 사용한다.
- 운영 서버에는 validate, none을 사용한다.
옵션 | 설명 |
---|---|
create | 기존 테이블 삭제 후 다시 생성(DROP and CREATE) |
create-drop | 종료 시점에 테이블 DROP |
update | 변경분만 반영된다. |
validate | 엔티티와 테이블이 정상 매핑 되었는지 확인한다. |
none | 아무 효과 없음 |
DDL 생성 기능
- 제약 조건을 추가하여 DDL 생성 시 조건을 넣을 수 있다.
- DDL 생성 시에만 영향을 미치고 JPA 실행 로직에는 영향이 없다.
@Column(nullable = false, length = 10)
private String name;
필드와 칼럼 매핑
Annotation | 설명 |
---|---|
@Column | 칼럼 매핑 |
@Temporal | 날짜 타입 매핑 |
@Enumerated | enum 타입 매핑 |
@Lob | BLOB, CLOB 매핑 |
@Transient | 특정 필드를 컬럼에 매핑하지 않는다. 매핑 무시 |
@Enumerated
속성 | 설명 | 기본값 |
---|---|---|
ORDINAL | enum 순서를 DB에 저장 | ORDINAL |
STRING | enum 이름을 DB에 저장 | ORDINAL |
- ORDINAL을 사용하게 되면 DB에 숫자가 들어가 매우 혼란이 생긴다.
- 그리고 enum의 위치가 바뀌면 문제가 발생하므로 항상 STRING을 사용한다.
@Teamporal
- 날짜 타입을 매핑할 때 사용된다.
- LocalDate, LocalDateTime은 생략이 가능하다.
private LocalDate localDate;
private LocalDateTime localDateTime;
@Temporal(TemporalType.TIMESTAMP) // DATE, TIME 속성도 있다.
private Date createDate;
@Lob
- 따로 지정할 수 있는 속성 없음
- 매핑이 필드 타입이 문자면 CLOB 매핑, 나머진 BLOB 매핑
@Transient
- 필드 매핑, DB 저장 조회를 하지 않는다.
기본키 매핑
기본키 매핑 방법
- 직접 할당: @Id 만 사용
- 자동 생성: @GeneratedValue
속성 | 설명 |
---|---|
IDENTITY | DB에 위임 |
SEQUENCE | DB 시퀀스 오브젝트 사용 @SequenceGenerator 필요 |
TABLE | 키 생성용 테이블 사용하여 모든 DB에서 사용한다. @TableGenerator 필요 |
AUTO | 방언에 따라 자동 지정한다. 기본값 |
IDENTITY
- 기본 키 생성을 DB에 위임한다.
- AUTO_INCREMENT는 JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL을 실행하므로 그 이후에 ID값을 알 수 있다.
- 하나 IDENTITY는 em.persist() 시점에 INSERT SQL을 실행하고 DB에서 식별자를 조회한다.
- PK 값이 DB에 들어가기 전까지 null이 되는데 persist로 영속성 콘텍스트에 넣은 값의 id가 null이 되기 때문에 persist 호출 시 DB에 값이 날아가서 ID값을 가져오게 된다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
'JPA' 카테고리의 다른 글
JPA 연관관계 매핑 4. 프록시 (0) | 2020.01.23 |
---|---|
JPA 연관관계 매핑 3. 상속관계 매핑 (0) | 2020.01.22 |
JPA 연관관계 매핑 2. 일대다, 다대일, 일대일, 다대다 연관관계 매핑 (0) | 2020.01.22 |
JPA 연관관계 매핑 1. 단방향 양방향 연관관계 이해하기 (0) | 2020.01.22 |
JPA와 JPA 영속성 컨텍스트, 플러시와 준영속 상태 (0) | 2020.01.06 |