Programing/JPA

JPA Sequence 자동증가 설정 @SequenceGenerator

리커니 2023. 3. 7. 18:15
반응형

MariaDB의 auto_increasement나 postgressql 의 serial 같은 자동증가 컬럼을 기본키로 설정하는 경우 

해당 시퀀스와 컬럼을 매핑해주어야 합니다.

이럴 때 사용하는 것이 @SequenceGenerator 입니다.

 

1. @SequenceGenerator 속성

name : 참조할 수 있는 시퀀스 제너레이터 명칭

sequenceName : DB에서 생성한 sequence 이름

initialValue : 시퀀스 시작 값 (DDL 생성 시에만 사용)

allocationSize : 시퀀스 호출 시마다 증가하는 수

catalog : DB 카탈로그

schema : DB 스키마

 

2. @SequenceGenerator 사용법

entity 레벨에 사용할 sequenceGenerator를 명명합니다.

 

@Entity
@Table(name = "TERMS", schema = "TEST")
@SequenceGenerator(name = "TERM_SQNO_GENERATOR", sequenceName = "TEST.TRMS_SQNO_SEQ", allocationSize = 1)
public class TERMS {

}

이제 컬럼레벨에서는 위에서 설정한 'TERM_SQNO_GENERATOR' 라는 명칭으로 시퀀스에 접근할 수 있습니다.

@GeneratedValue를 사용하여 위에서 설정한 SequqnceGenerator에 접근합니다.

(sequenceGenerator를 컬럼 레벨에 설정해도 됩니다.)

@Entity
@Table(name = "TRMS", schema = "TEST")
@SequenceGenerator(name = "TRMS_SQNO_GENERATOR", sequenceName = "TEST.TRMS_SQNO_SEQ", allocationSize = 1)
public class TRMS {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TERM_SQNO_GENERATOR")
    @Column(name = "TRMS_SQNO")
    private Long trmsSqno;
}

strategy에는 아래의 4가지가 있습니다.

SEQUENCE : DB 시퀀스, @SequenceGenerator를 설정해줘야 함. DB 시퀀스에서 시퀀스 값을 조회한 후 영속성 컨텍스트에 저장.

IDENTITY : 기본 키 생성을 위임. DB에 엔티티를 저장 후 자동 증가한 시퀀스 값을 조회하여 영속성 컨텍스트에 저장. (데이터를 저장해야 시퀀스 값 획득)

TABLE : 별도의 키 생성 테이블 사용, @TableGenerator를 설정해줘야 함. DB 시퀀스 생성용 테이블에서 시퀀스 값을 조회한 후 영속성 컨텍스트에 저장

AUTO : 방언에 따라 자동으로 기본 값으로 지정

반응형