기본 키 매핑 어노테이션
종류 2개
• @Id
• @GeneratedValue
직접 할당: @Id만 사용
자동 생성: (@GeneratedValue):
(종류 4개)
• IDENTITY: 데이터베이스에 위임, MYSQL
• SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE
@SequenceGenerator 필요
• TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용
@TableGenerator 필요
• AUTO: 방언에 따라 자동 지정, 기본값
IDENTITY는 db에게 ID자동생성을 위임하기 때문에 데이터 베이스에 저장이 되어야만 pk값을 알수 있다.
때문에 IDENTITY 는 예외적으로 db에 저장되기전에 persist를 했을때 id값( pk)을 받을 수 있도록 insert 문이 persist에서 실행된다.
단점: 캐시에 모아서 insert해줄 수 없다.
ex.MYSQL
SEQUENCE는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트이다.
parsist할때 시퀀스에 가서 다음으로 들어갈 값을 받아와서(call next value for member_seq) 입력되면서 parsist된다.
ex.오라클, PostgreSQL, DB2, H2 데이터베이스
db에 50까지 미리 확보하여 올려놓고 메모리를 1씩늘려서 51 까지쓰다 마주치면 다시 next call해주고 51+50하여 공간을 확보하고 어플리케이션은 52부터 쓰도록하는 식으로 해서 동시성 이슈 없이 하기위해 이런식으로 구조가 되어있다고 한다.