@GeneratedValue

노지환·2021년 7월 21일
0

내꺼로 만들기

목록 보기
4/5

Primary Key를 자동생성을 도와준다.
속성으로는 generator와 strategy가 있지만, 이번에 다룰 것은 stratgy이다.

기본적인 사용법은,

@GeneratedValue
Long id; // PK가 될 변수 위에 써주면 된다.

여기서, PK를 어떤 식으로 설정할 것인지를 지정해줄 수 있다.

strategy=GenerationType.AUTO

@GeneratedValue에 아무것도 붙이지 않았을 때, AUTO가 자동적으로 지정된다.
AUTO는 JPA 구현체가 자동적으로 생성 전략을 결정하는데, 직접 사용해본 결과로는 프로젝트에 있는 모든 @GeneratedValue의 값을 한꺼번에 관리한다.
따라서, 한 테이블의 id값이 선형적으로 들어오지 않는다는 단점이 있다.

예를 들어,

user id : 1, 3, 6, 7, 8, 10
post id : 2, 3, 4, 9

이런식으로 전체의 id를 관리하는 모습을 볼 수 있다.

strategy=GenerationType.IDENTITY

기본키 세팅을 데이터베이스에 위임하는 strategy이다.
위에 AUTO는 jpa에서 전체적으로 관리하였다면, IDENTITY는 사용하는 DB에 따라 PK를 설정해주는 방식이 달라진다.

strategy=GenerationType.SEQUENCE

데이터베이스의 sequence 컬럼을 사용하여 기본키를 생성한다.

generator를 사용하여, initialValue(시작 값)와 allocationSize(메모리를 통해 할당할 사이즈)를 지정할 수 있다.
-> (그냥 sequence만 사용해도 기본적인 값으로 진행된다.)

코드로 보자면,

@SequenceGenerator(
            name="TEST_GENERATOR", //시퀀스 제너레이터의 이름
            sequenceName="SEQ_TEST", //시퀀스 이름
            initialValue=1, //시작값
            allocationSize=10 //메모리를 통해 할당할 범위 사이즈
            )
            
@GeneratedValue(
            strategy=GenerationType.SEQUENCE,
            generator="TEST_GENERATOR"
            )
    private Long id;

이런식으로 사용할 수 있다.

strategy=GenerationType.TABLE

데이터베이스에 유일성이 보장된 키 생성 전용 테이블을 하나 만들고 이를 사용하여 기본키를 생성한다.

profile
기초가 단단한 프로그래머 -ing

0개의 댓글