Spring & Spring Boot

[ Spring-Boot ] JPA @GeneratedValue 사용하기

사과씨앗 2021. 5. 22. 18:26
728x90
반응형

@GeneratedValue란? 

-> JPA에서 Entity의 Primary Key를 생성하여 주는 기능이다.

 

    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long Id;

위처럼 Pk로 사용될 Entity의 프로퍼티에 @Id를 선언하여 준다음 @GeneratedValue를 선언하여 준다.

 

@GeneratedValue는 strategy 네 가지 전략을 바꿔 가며 사용할 수 있다.

 

1. IDENTITY

 @GeneratedValue(strategy = GenerationType.IDENTITY)

 

> 기본 키 생성을 데이터베이스에 위임한다.

Entity를 등록할 때 DB에서 AUTO_INCREAMENT 하여 PK를 생성 후 INSERT 한다.

MySQL, PostgreSQL, 등등

 

2. SEQUENCE

 

@SequenceGenerator(
        name = "MEMBER_SEQ_GENERATOR",
        sequenceName = "MEMBER_SEQ",
        initialValue = 1,
        allocationSize = 1
)
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
    				generator = "MEMBER_SEQ_GENERATOR")
    @Column(name = "member_id")
    private Long Id;

 

> DB의 Sequence를 이용하여 PK를 생성한다.

Oracle 등등..

 

> Sequence 전략 사용 시 @SequenceGenerator을 선언하여 사용한다.

 

@SequenceGenerator 속성 

 

name  : 식별자 생성기 이름 필수


sequenceName  : 데이터베이스에 등록되어 있는 시퀀스 이름 hibernate_sequence


initialValue  : DDL 생성 시에만 사용됨, 시퀀스 DDL을 생성할 때 처음 1 시작하는 수를 지정한다. 1


allocationSize  : 시퀀스 한 번 호출에 증가하는 수 (성능 최적화에 사용), 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야 한다. 50


catalog, schema  : 데이터베이스 catalog, schema 이름

 

3.Table

 

> 키 생성을 위한 테이블을 만들어 마치 Sequence를 사용하는 것처럼 한다.

@TableGenerator을 선언하여 사용한다.

 

@TableGenerator(
        name = "MEMBER_SEQ_GENERATOR",
        table = "MEMBER_SEQUENCE",
        pkColumnValue = "MEMBER_SEQ",
        allocationSize = 1
)
public class Member extends BaseEntity{

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE,
                    generator ="MEMBER_SEQ_GENERATOR" )
    @Column(name = "member_id")
    private Long Id;

 

4. AUTO

 

@GeneratedValue(strategy = GenerationType.AUTO)

> 기본값으로 DB 방언에 맞춰 자동으로 설정하여 준다.

 

 

728x90
반응형