[JPA] 엔티티 기본 키 매핑

mminjg·2022년 7월 11일
0

기본 키 매핑 방법

  • 직접 할당: @Id만 사용
  • 자동 생성(@GeneratedValue)
    • IDENTITY: 데이터베이스에 위임, MYSQL
    • SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE
      • @SequenceGenerator 필요
    • TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용
      • @TableGenerator 필요
    • AUTO: 방언에 따라 자동 지정, 기본값

IDENTITY 전략

@Entity 
public class Member { 

 @Id 
 @GeneratedValue(strategy = GenerationType.IDENTITY) 
 private Long id;
  • 기본 키 생성을 데이터베이스에 위임한다.
  • 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용한다.
  • AUTO_ INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있다.
  • em.persist() 시점에 즉시 INSERT SQL을 실행하고 DB에서 식별자를 조회한다.

SEQUENCE 전략

@Entity 
@SequenceGenerator( 
 name = “MEMBER_SEQ_GENERATOR", 
 sequenceName = “MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
 initialValue = 1, allocationSize = 50) // 미리 50개 세팅, 미리 값을 올려두는 방식
public class Member { 

 @Id 
 @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MEMBER_SEQ_GENERATOR") 
 private Long id;
  • 데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트(예: 오라클 시퀀스)
  • 오라클, PostgreSQL, DB2, H2 데이터베이스에서 사용한다.

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;
  • 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략이다.
  • 장점: 모든 데이터베이스에 적용 가능하다.
  • 단점: 성능이 좋지 않다.

0개의 댓글