@SequenceGenerator 시퀀스 세부 설정

이동영·2024년 3월 18일

JPA

목록 보기
5/8
post-thumbnail
  • @GeneratedValue의 엔티티 기본키를 자동으로 생성하는데 사용된다.
  • 시퀀스 생성기는 데이터베이스 시퀀스를 사용하여 기본 키 값을 자동으로 생성하는 방식이다.
  • @GeneratedValue에 generator 요소를 사용하면 시퀀스 생성기를 지정할 수 있다. 시퀀스 생성기는 데이터베이스의 시퀀스를 사용하여 엔티티의 기본 키값을 자동으로 설정하는 방식이다.

    예시

    @SequenceGenerator(name="EMP_SEQ", allocationSize=25)

    속성

    name

    필수 속성이며 @GeneratedValue의 설정된 name을 설정하면 해당 @GeneratedValue가 붙은 컬럼에 적용된다.

    allocationSize

    선택사항이며 시퀀스 번호가 증가할 때 증가할 양을 설정한다.

    catalog

    선택사항이며 시퀀스의 카탈로그 이다.

    initialValue

    선택사항이며 시퀀스의 시작값을 설정한다.

    schema

    선택사항이며 시퀀스의 스키마이다.

    sequenceName

    데이터베이스에 저장될 시퀀스 개체의 이름을 설정한다.

    예제

package com.example.youngJPA.member.entity;

import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Entity
@Getter
@Setter
@Builder
@Table(name = "MEMBER")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@SequenceGenerator(
                        name = "MEMBER_ID_GEN",
                        sequenceName = "MEMBER_ID",
                        initialValue = 1000000,
                        allocationSize = 1
                  )
public class Member {

    //    JPA 테이블 컬럼 생성
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "MEMBER_ID_GEN")
    @Column(name = "MEMBER_ID", length = 20, unique = true)
    private Long memberId;

    @Column(name = "ID",length = 200,nullable = false)
    private String id;

    @Column(name = "PW",length = 200,nullable = false)
    private String pw;

    @Column(name = "ABOUT_ME",length = 3000,updatable = false)
    private String aboutMe;

    @Column(name = "MEMBER_DT",updatable = false,nullable = false)
    private LocalDate memberDt;

    @Column(name = "MEMBER_AUTH",updatable = false)
    @Enumerated(EnumType.STRING)
    private Auth memberAuth;
}

해당 예제에서는 memberId필드의 @GeneratedValue에 GenerationType을 SEQUENCE로 설정하였고 generator속성으로 사용할 시퀀스의 이름을 기입해주어야 한다.

시퀀스를 사용하기 위해서는 클래스 위해 스퀀스에 대한 설정을 해주기 위해 @SequenceGenerator를 선언하고 세부 속성으로 name은 MEMBER_ID_GEN , sequenceName은 데이터베이스에 저장될 시퀀스 개체의 이름을 MEMBER_ID로 설정해주었다. initialValue 는 시작값이 1,000,000 부터 시작되도록 하였으며 allocationSize은 증가값이 1씩 증가하도록 설정하였다.

2024-03-18T17:08:40.834+09:00 DEBUG 26592 --- [  restartedMain] org.hibernate.SQL                        : 
    create sequence member_id start with 1000000 increment by 1
Hibernate: 
    create sequence member_id start with 1000000 increment by 1
2024-03-18T17:08:41.157+09:00 DEBUG 26592 --- [  restartedMain] org.hibernate.SQL                        : 
    create table member (
        member_dt date not null,
        member_id number(19,0) not null,
        id varchar2(200 char) not null,
        pw varchar2(200 char) not null,
        about_me varchar2(3000 char),
        member_auth varchar2(255 char) check (member_auth in ('MASTER','USER')),
        primary key (member_id)
    )

실제로 로그를 살펴보면 create sequence member_id start with 1000000 increment by 1와 같이 member_id 라는 이름으로 시퀀스가 생성되는 것을 확인할 수 있다.

RDBMS에서 증가되는 값을 확인해보면 1식 잘 증가되는것을 확인해볼 수 있다.

profile
가치를 제공하는 개발자

0개의 댓글