JPA : SEQUENCE전략

zyan·2021년 8월 19일
0

JPA

목록 보기
4/6
post-custom-banner

시퀀스(Sequence)란?

시퀀스란 순차적으로 증가하는 데이터를 자동으로 반환해주는 데이터베이스 객체를 말한다. PK값의 중복을 방지하기 위해 사용하기도 하는데, 게시판의 글 번호를 예시로 들 수 있다. 게시판의 글 번호를 수동으로 +1해줄 필요 없이, 자동으로 이루어져 매우 편리하다.


시퀀스전략

JPA는 엔티티들을 영속성 컨텍스트에서 관리하는데, 이 엔티티를 구분할 수 있는 식별자가 필요하다. 식별자가 되는 필드는 @Id 어노테이션을 통해 지정할 수 있다.

이처럼 JPA에서 엔티티에 식별자를 할당하는 방법은 여러가지가 있지만, 그 중 Oracle, DB2, H2, PostgreSQL 등에서 사용할 수 있는 시퀀스 기능을 활용한 SEQUENCE 전략이 있다.


@SequenceGenerator

@SequenceGenerator는 시퀀스 생성기를 설정하는 어노테이션이다. 클래스 단위 또는 식별자 필드에서 @GeneratedValue설정과 함께 사용 가능하다.

@SequenceGenerator의 속성은 아래와 같다.

  • name : @GeneratedValue에서 지정할 수 있는 시퀀스 생성기 이름을 등록합니다.
  • sequenceName : 데이터베이스에 생성해둔 시퀀스 이름
  • initialValue : DDL을 생성할 때 사용하며, 시퀀스 생성 DDL에서 처음 시작하는 값 지정
  • allocationSize : JPA에서 가상으로 관리할 시퀀스 할당 범위로, 성능 최적화를 위해 값 수정이 가능하다. 기본값은 50이며, 1로 설정하는 경우 매번 insert시마다 DB의 시퀀스 호출
  • catalog, schema : DB의 카타로그와 스키마 이름
@SequenceGenerator(name="team_seq_gen", sequenceName="team_seq_id"
		   , initialValue=1, allocationSize=50)

식별자 할당 전략 및 시퀀스 생성기 사용 설정

DB에서 생성한 시퀀스를 이용하여 식별자를 생성하는 생성기를 생성한 이후에는 해당 시퀀스 생성기를 사용하겠다는 설정이 필요하다. @GeneratedValue를 통해 strategy속성을 GenerationType.SEQUENCE로 하여 식별자를 할당하는 전략을 '시퀀스 방식으로 하겠다'라는 설정과, 식별자를 생성해줄 식별자 생성기를 team_seq_gen으로 사용하겠다는 설정을 속성을 통해 설정한다.

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="team_seq_gen")

참고 : https://dololak.tistory.com/479

post-custom-banner

0개의 댓글