T_era
JPA 기본 키(Primary Key) 매핑 본문
JPA Entity 생성 시 기본 키는 필수적으로 정의되어야 한다.
사용되는 Annotation
- @Id: 해당 필드를 기본 키(Primary Key)로 지정한다.
- @GeneratedValue: 기본 키 값 자동 생성을 설정한다.
기본 키 생성 방식
- 수동 생성: 개발자가 직접 기본 키 값을 할당한다.
@Id private Long id; // ... Tutor tutor = new Tutor(1L, "wonuk"); - 자동 생성: @GeneratedValue 어노테이션을 이용하여 데이터베이스 또는 JPA 구현체에 기본 키 생성을 위임한다.
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // ...
@GeneratedValue 속성 (PK 생성 전략)
영속성 컨텍스트는 Entity의 기본 키를 필수적으로 요구한다. 통상적으로 Long 타입의 기본 키 사용이 권장된다.
속성 값설명사용 데이터베이스관련 Annotation
| GenerationType.IDENTITY | 데이터베이스가 기본 키를 자동 생성 (AUTO_INCREMENT) | MySQL, PostgreSQL | |
| GenerationType.SEQUENCE | 데이터베이스 시퀀스를 이용하여 기본 키 생성 | Oracle | @SequenceGenerator |
| GenerationType.TABLE | 키 생성 전용 테이블을 이용하여 기본 키 생성 | 모든 DB | @TableGenerator |
| GenerationType.AUTO | JPA 구현체가 데이터베이스 Dialect에 따라 적절한 전략을 자동 선택 | (기본값) |
주의 사항:
- GenerationType.AUTO의 기본 동작은 JPA 구현체 및 데이터베이스 버전에 따라 상이할 수 있으므로, 명시적으로 데이터베이스에 적합한 전략을 지정하여 사용해야 한다. (예: MySQL 환경에서는 IDENTITY, Oracle 환경에서는 SEQUENCE).
- GenerationType.IDENTITY 전략은 em.persist() 시점에 즉시 INSERT SQL을 실행하여 생성된 기본 키 값을 조회할 수 있다. 반면, 일반적인 AUTO_INCREMENT 방식은 트랜잭션 Commit 이후에 기본 키 값을 알 수 있다.
'Programing > Spring' 카테고리의 다른 글
| JPA vs Spring Data JPA (0) | 2025.05.16 |
|---|---|
| 연관관계 매핑 (0) | 2025.05.16 |
| JPA 필드 매핑 상세 정리 (0) | 2025.05.15 |
| JPA @Entity와 @Table 어노테이션 정리 (0) | 2025.05.15 |
| JPA 관련 설정 (0) | 2025.05.15 |