T_era

JPA 기본 키(Primary Key) 매핑 본문

Programing/Spring

JPA 기본 키(Primary Key) 매핑

블스뜸 2025. 5. 15. 19:14

JPA Entity 생성 시 기본 키는 필수적으로 정의되어야 한다.

사용되는 Annotation

  • @Id: 해당 필드를 기본 키(Primary Key)로 지정한다.
  • @GeneratedValue: 기본 키 값 자동 생성을 설정한다.

기본 키 생성 방식

  1. 수동 생성: 개발자가 직접 기본 키 값을 할당한다.
    @Id
    private Long id;
    
    // ...
    
    Tutor tutor = new Tutor(1L, "wonuk");
    
  2. 자동 생성: @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