4. 엔티티 매핑
JPA를 사용하는 데 가장 중용한 일은 엔티티와 테이블을 정확히 매핑하는 것
- 객체와 테이블 매핑 : @Entity, @Table
- 기본 키 매핑 : @Id
- 필드와 컬럼 매핑 : @Column
- 연관관계 매핑 : @ManyToOne, @JoinColumn
1. @Entity
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야함 @Entity가 붙는 클래스는 JPA가 관리하는 것으로, 엔티티라 부름
속성 정리
속성 | 기능 | 기본값 |
---|---|---|
name | JPA 에서 사용할 엔티티 이름을 지정함 | 설정하지 않으면 클래스 이름을 그대로 사용함 |
주의사항
- 기본 생성자는 필수
- final 클래스, enum, interface, inner 클래스에는 사용할 수 없음
- 저장할 필드에 final을 사용하면 안됨
2. @Table
엔티티와 매핑할 테이블을 지정함. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용함
속성 정리
속성 | 기능 | 기본값 |
---|---|---|
name | 매핑할 테이블 이름 | 엔티티 이름을 사용함 |
catalog | catalog 기능이 있는 데이터베이스에서 catalog를 매핑함 | |
schema | schema 기능이 있는 데이터베이스에서 schema를 매핑함 | |
uniqueConstraints(DDL) | DDL 생성 시에 유니크 제약조건을 만듬 (스키마 자동 생성 기능 사용하여 DDL 만들 때만 사용) |
3. 다양한 메핑 사용
@Enumerated
자바의 enum 에 사용
@Temporal
자바의 날짜 타입에 사용
@Lob
길이 제한이 없음. 데이터베이스의 CLOB, BLOB 타입에 사용
4. 데이터베이스 스키마 자동 생성
5. DDL 생성 기능
6. 기본 키 매핑
기본 키(primary eky) 매핑
- 직접 할당 : 기본 키를 애플리케이션에서 직접 할당
- 자동 생성 : 대리 키 사용 방식
- IDENTITY : 기본 키 생성을 데이터베이스에 위임
- SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키를 할당함
- TABLE : 키 생성 테이블을 사용함
6.1. 기본 키 직접 할당 전략
@Id 을 사용
@Id
@Column(name = "id")
private String id;
@Id 적용 가능 타입
- 자바 기본형
- 자바 래퍼(Wrapper)형
- String
- java.util.Date
- java.sql.Date
- java.math.BigDecimal
- java.math.BigInteger
기본 키 직접할당 전략은 em.persist()로 엔티티를 저장하기 전에 애플리케이션에서 기본 키를 직접 할당하는 방법
Board board = new Board();
board.setId("01"); // 기본 키 직접 할당
em.persist(board);
6.2. IDENTITY 전략
기본 키 생성을 데이터베이스에 위임하는 전략. 주로 MySQL, PostgreSQL, SQL Server, DB2 에서 사용
ex) MySQL 의 AUTO_INCREMENT 기능
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
순서
- 먼저 엔티티를 데이터베이스에 저장한 후에 식별자를 조회해서 엔티티의 식별자를 할당함
6.3. SEQUENCE 전략
시퀀스를 사용해서 기본 키를 생성함. 시퀀스를 지원하는 오라클, PostgreSQL, DB2, H2 데이터베이스에서 사용
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_TEST")
private Long id;
순서
- SEQUENCE 전략은 em.persist() 를 호출할 떄 먼저 데이터베이스 시퀀스를 사용해서 식별자를 조회함
- 조회한 식별자를 엔티티에 할당한 후에 엔티티를 영속성 컨텍스트에 저장함
- 트랜잭션을 커밋해서 플러시가 일어나면 엔티티를 데이터베이스에 저장함
@SequestGenerator
속성 | 기능 | 기본값 |
---|---|---|
name | 식별자 생성기 이름 | 필수 |
sequenceName | 데이터베이스에 등록되어 있는 시퀀스 이름 | hibernate_sequence |
ititialValue | DDL 생성 시에만 사용됨, 시퀀스 DDL을 생성할 때 처음 시작하는 수를 지정함 | 1 |
allocationSize | 시퀀스 한 번 호출에 증가하는 수(성능 최적화에 사용됨) | 50 |
catalog | 데이터베이스 catalog, schema 이름 |
매핑 DDL
create sequence [sequenceName]
start with [ititialValue] increment by [allocationSize]
'공부 > Jpa' 카테고리의 다른 글
03. 영속성 관리 (0) | 2019.02.10 |
---|---|
01. Jpa 란? (0) | 2019.02.10 |