[JPA] 💡기본키, 시퀀스 어노테이션 (설정)
@Entity
@SequenceGenerator(name="MEMBER_SEQ_GENERATOR",
sequenceName = "MEMBER_SEQ",
initialValue = 1, // initialValue : 기본값 1
allocationSize = 1) // allocationSize :기본값 50
public class MemberPK {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator ="MEMBER_SEQ_GENERATOR" )
private Long id;
//💥웬만하면 String < Integer < Long을 사용하자, 나중에 타입변경하는 게 더 힘들고, 요새 성능이 좋아서 Long 타입으로 해도 괜춘!
시퀀스 설정
@SequenceGenrator를 사용하면 테이블마다 시퀀스를 따로 관리할 수 있다
(명시해주지 않으면 기본 hibernate_sequence를 사용하게 된다)
어노테이션
@SequenceGenerator(name="MEMBER_SEQ_GENERATOR",
sequenceName = "MEMBER_SEQ",
initialValue = 1, // initialValue : 기본값 1
allocationSize = 1) // allocationSize :기본값 50 (시퀀스 한번 호출에 증가하는 수, 성능 최적화에 사용된다. 기본 50으로 하는게 적절하다)
public class MemberPK {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator ="MEMBER_SEQ_GENERATOR" )
private Long id;
}
SQL문으로 작성한다면? 아래와 위는 같은 결과이다.
create sequence member_seq start with 1 increment by 1
기본키 설정
@Id : 직접할당
@GenerateValue : 자동생성
@GeneratedValue(strategy = GenerationType.옵션)
[ AUTO ]
@GeneratedValue(strategy = GenerationType.AUTO) 가 기본( 방언(현재 DB) 에 따라 자동 지정됨)
-> @GeneratedValue만 써도 됨
[ IDENTITY ]
@GeneratedValue(strategy = GenerationType. IDENTITY )
- MySQL, PostgreSQL, SQL Server, DB2에서 사용
- em.persist() 시점에 즉시 INSERT SQL 실행 하고 DB에서 식별자를 조회
기본키 선택 전략
- 기본 키 제약 조건 : null 아님, 유일, 변하면 x
- 미래까지 만족해야함 - 대리키를 사용하자
- 권장 : Long형 + 대체키 or 회사에서 정해준 규칙을 활용해서 기본키를 지정하자