- @Id
- @GeneratedValue
- 직접 할당 : @Id만 사용
- 자동 생성 (@GeneratedValue)
- IDENTITY : 데이터베이스에 위임, MYSQL
- SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE
- @SequenceGenerator 필요
- TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용
- @TableGenerator 필요
- AUTO : 방언에 따라 자동 지정, 기본값
- 값을 세팅(set) X, 데이터베이스에 위임한다.
- 즉, id 값을 null로 하면 데이터베이스가 알아서 AUTO_INCREMENT 해준다
- null 값으로 보내진다.
- 테이블 마다 시퀀스 오브젝트를 따로 관리하고 싶으면 @SequenceGenerator에 sequenceName 속성을 추가한다.
- 즉 데이터베이스가 자동으로 숫자를 generate 해준다
- 잘 사용 X
- 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략
- 장점
- 모든 데이터베이스에 적용 가능
- 단점
- 성능
- 하지만 좋지 못한 코드이다. -> 이유는 Column name을 통해 맞춰 객체스럽지 못하고, 관계형 DB에 맞춘 설계이다.
- 테이블의 외래키를 객체에 그대로 가져옴
- 객체 그래프 탐색이 불가능하다.