기본 키 매핑 방법
- 직접 할당
- 자동 생성
직접 할당
@ID만 사용하여 기본 키를 정하고 값을 직접 할당하는 방법이다.
Member member = new Member();
member.setId("1"); // 기본키 직접 할당
em.persist(member);
자동 생성
@GenerateValue를 사용하여 자동으로 기본키를 생성한다.
- IDENTITY: 기본키 생성을 데이터베이스에 위임한다.
- SEQUENCE: 데이터베이스 시퀀스 오브젝트를 사용한다.
- TABLE: 키 생성용 테이블을 사용한다.
- • AUTO: 방언에 따라 자동 지정한다. 기본 값이다.
IDENTITY 전략
기본 키 생성을 데이터베이스에 위임한다.
주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용한다. (MySQL의 AUTO_INCREMENT)
JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행한다.
AUTO_ INCREMENT는 데이터베이스에 INSERT SQL을 실행 한 이후에 ID 값을 알 수 있다.
IDENTITY 전략은 em.persist() 시점에 즉시 INSERT SQL 실행하고 DB에서 식별자를 조회한다.
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
SEQUENCE 전략
유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트이다.
오라클, PostgreSQL, DB2, H2 데이터베이스에서 사용한다.
@Entity
@SequenceGenerator(
name = “MEMBER_SEQ_GENERATOR",
sequenceName = “MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
initialValue = 1, allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
@ SequenceGenerator를 통해 "MEMBER_SEQ_GENERATOR" 시퀀스 생성기를 등록한다.
매핑할 시퀀스 이름을 "MEMBER_SEQ"로 정하여 DB에 저장되어 있는 "MEMBER_SEQ" 시퀀스와 매핑한다.
@GenerateValue를 시퀀스 전략으로 정하고 시퀀스 생성기의 이름을 선택하면 키의 값을 자동으로 생성해 준다.
TABLE 전략
키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉 내내는 전략
모든 데이터베이스에 적용 가능하나 성능이 좋지 않다.
create table MY_SEQUENCES (
sequence_name varchar(255) not null,
next_val bigint,
primary key ( sequence_name )
)
키 생성 용도로 사용할 Table을 생성하였다.
@Entity
@TableGenerator(
name = "MEMBER_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnValue = “MEMBER_SEQ", allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
@TableGenerator로 미리 생성해 놓은 테이블을 매핑한다.
그리고 @GenerateValue에 테이블 생성기를 지정해 준다.
id의 키 값은 Table에서 자동으로 생성해 매핑하게 된다.
출처 : https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
'JPA' 카테고리의 다른 글
[JPA] 프록시와 지연로딩 (2) | 2023.03.05 |
---|---|
[JPA] @MappedSuperclass 사용법 (0) | 2023.03.03 |
[JPA] 상속관계 매핑 (0) | 2023.03.03 |
[JPA] 연관관계 매핑 (0) | 2023.02.28 |
[JPA] 영속성 컨텍스트 (0) | 2023.02.26 |