[JPA] @GeneratedValue 기본키 설정방식

배지원·2022년 11월 10일
0

SpringBoot

목록 보기
7/11

1. @GeneratedValue가 무엇일까?

  • 기본키를 자동 생성해주는 어노테이션이다. 기본키를 생성해주는 방식에는 여러개가 있다. 만약 방식을 설정해주지 않으면 default값인 AUTO가 실행이 된다.

2. 전략 종류

(1) IDENTITY

  • IDENTITY 전략은 기본 키 생성을 데이터베이스에 위임하는 전략으로 DB에서 자동으로 1씩 증가시키는 방식으로 MYSQL에서는 AUTO_INCREMENT를 사용해 기본키를 자동으로 생성한다. (DB에서 값이 새로 들어 올때마다 자동으로 id값에 +1하여 저장함
    IDENTITY전략은 데이터베이스에 값을 저장하고 나서야 기본키 값을 구할 수 있을때 사용한다.
@GeneratedValue(strategy = GenerationType.IDENTITY)



(2) SEQUENCE

  • 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트로 시퀀스(순서를 정함)를 사용해서 기본키를 생성한다. 이 전력은 시퀀스를 지원하는 DB에서 사용이 가능하다.
  • 시퀀스 전략을 사용하기 위해서는 우선 사용할 데이터베이스 시퀀스를 매핑해야 한다.
// 시퀀스 매핑
@SequenceGenerator(
        name = "BOARD_SEQ_GENERATOR",
        sequenceName = "BOARD_SEQ",
        initialValue = 1,
        allocationSize = 1
)
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
    generator = "BOARD_SEQ_GENERATOR")
    @Column(name = "MEMBER_ID")
    private Long id;
}
속성기능기본값
name식별자 생성기 이름필수
sequenceName데이터베이스에 등록되어 있는 시퀀스 이름hibernate_sequence
initialValueDDL 생성 시에만 사용된다.
시퀀스 DDL을 생성할 때 처음 시작하는 수를 지정한다.
1
allocationSize시퀀스를 한 번 호출할 때 증가하는 수 (성능 최적화에 사용된다.)50
catalog, schema식별자 생성기의 catalog, schema 이름


(3) TABLE

  • 키 생성 전용 테이블을 하나 만들고, 여기에 이름과 값으로 사용할 컬럼을 만들어 데이터베이스 시퀀스를 흉내내는 전략입니다.
  • 이 전략은 시퀀스와 거의 비슷하고 테이블을 사용하기 때문에, 시퀀스를 지원하지 않는 데이터베이스에서도 사용할 수 있다.
  • TABLE의 장점은 기존 시퀀스 전략과 달리 테이블을 만들어 테이블안에서 여러 pk들을 관리할 수가 있다는 장점이 있다.
@TableGenerator(
        name = "BOARD_SEQ_GENERATOR",
        table = "MY_SEQUENCE",
        pkColumnValue = "BOARD_SEQ",
        initialValue = 1,
        allocationSize = 50
)
public class Member {
    
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE,
    generator = "BOARD_SEQ_GENERATOR")
    @Column(name = "MEMBER_ID")
    private Long id;
}
속성기능기본값
table키생성 테이블명hibernate_sequences
pkColumnName시퀀스 컬럼명sequence_name
valueColumnName시퀀스 값 컬럼명next_val
pkColumnValue키로 사용할 값 이름엔티티 이름
initialValue초기 값. 마지막으로 생성된 값이 기준이다.0
allocationSize시퀀스를 한 번 호출할 때 증가하는 수 (성능 최적화에 사용된다.)50
catalog, schema식별자 생성기의 catalog, schema 이름
uniqueConstraints (DDL)유니크 제약 조건을 지정할 수 있다.


위 이미지 처럼 table을 생성한 후 각 스퀀스별 value를 관리할 수 있다.


(4) AUTO

  • AUTO를 사용시 IDENTITY, SEQUENCE, TABLE 중 하나를 자동으로 선택함
  • @GeneratedValue의 strategy의 기본값은 AUTO이다.
  • 만약 AUTO 사용시 SEQUENCE나 TABLE 전략이 선택되면, 시퀀스나 키 생성용 테이블을 미리 만들어 둬야 한다.
@GeneratedValue(strategy = GenerationType.AUTO)


참고자료 : GeneratedValue 관련 용어

profile
Web Developer

0개의 댓글