Primary Key를 자동생성을 도와준다.
속성으로는 generator와 strategy가 있지만, 이번에 다룰 것은 stratgy이다.
기본적인 사용법은,
@GeneratedValue
Long id; // PK가 될 변수 위에 써주면 된다.
여기서, PK를 어떤 식으로 설정할 것인지를 지정해줄 수 있다.
@GeneratedValue에 아무것도 붙이지 않았을 때, AUTO가 자동적으로 지정된다.
AUTO는 JPA 구현체가 자동적으로 생성 전략을 결정하는데, 직접 사용해본 결과로는 프로젝트에 있는 모든 @GeneratedValue의 값을 한꺼번에 관리한다.
따라서, 한 테이블의 id값이 선형적으로 들어오지 않는다는 단점이 있다.
예를 들어,
user id : 1, 3, 6, 7, 8, 10
post id : 2, 3, 4, 9
이런식으로 전체의 id를 관리하는 모습을 볼 수 있다.
기본키 세팅을 데이터베이스에 위임하는 strategy이다.
위에 AUTO는 jpa에서 전체적으로 관리하였다면, IDENTITY는 사용하는 DB에 따라 PK를 설정해주는 방식이 달라진다.
데이터베이스의 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;
이런식으로 사용할 수 있다.
데이터베이스에 유일성이 보장된 키 생성 전용 테이블을 하나 만들고 이를 사용하여 기본키를 생성한다.