@ID
● 직접 할당 : @Id만 사용
@Id
@GenratedValue
● 자동생성(@GeneratedValue)
● IDENTITY - 데이터 베이스에 위임 , MYSQL
○ 기본 키 생성을 데이터베이스에 위임
○ JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행
○ AUTO_INCREMENT는 데이터 베이스에 INSERT SQL을 실행한 이후에 ID값을 알 수 있음
○ IDENTITY 전략은 em.persist() 즉 영속성컨텍스트에 추가될 때 INSERT SQL 실행하여 DB에서 식별자를 조회
@GeneratedValue(strategy = GenerationType.IDENTITY)
● SEQUENCE - 데이터 베이스 시퀀스 오브젝트 사용, ORACLE
- @SequenceGenerator 필요
@SequenceGenerator(
name = "MEMBER_SEQ_GENERATOR",
sequenceName = "MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
initialValue = 1, allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "MEMBER_SEQ_GENERATOR")
○ 데이터 베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트 ex) 오라클 시퀀스
● TABLE - 키 생성용 테이블 사용, 모든 DB에서 사용
- @TableGenerator 필요
○ 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내
○ 장점은 모든데이터베이스에서 적용가능하나 단점은 성능이다.
@TableGenerator(
name = "MEMBER_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnValue = "MEMBER_SEQ", allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "MEMBER_SEQ_GENERATOR")
● AUTO - 방언에 따라 자동 지정, 기본값
권장 - 식별자 전략
● 기본키 제약 조건 : null 아님, 유일, 변하면 안됨
● 대체키 사용
● LONG형 , 키 생성전략 사용, 대체키 사용
'Jpa' 카테고리의 다른 글
JPA 프록시의 특징 (0) | 2024.07.06 |
---|---|
연관관계 매핑 (1) | 2024.07.02 |
엔티티 매핑 (필드, 컬럼) (0) | 2024.07.02 |
영속성 컨텍스트 (0) | 2024.07.02 |
JPA application.yml 설정 (0) | 2024.07.01 |