JPA Entity ID 생성 전략

청포도봉봉이·2023년 8월 8일
0

Spring

목록 보기
22/35
post-thumbnail

✅ID 생성 전략

JPA (Java Persistence API)를 사용하여 엔티티의 식별자(ID)를 생성하려면 다양한 방법을 사용할 수 있습니다. 일반적으로 식별자는 데이터베이스에서 각 테이블 행의 고유한 값을 나타냅니다. 여기에서 더 자세하게 다양한 ID 생성 전략을 확인해 보겠습니다.



👉GenerationType.AUTO (기본값)

GenerationType.AUTO는 JPA 구현체에 따라 자동으로 식별자 생성 전략을 선택합니다. 이 경우, JPA는 사용 중인 데이터베이스 및 구현 체제(예: Hibernate, EclipseLink)를 기반으로 최선의 방법을 결정합니다. 즉, 데이터베이스에 따라 IDENTITY, SEQUENCE 또는 TABLE 전략 중 하나를 선택합니다.

@Entity
public class EntityAuto {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    // ...
}

👉GenerationType.IDENTITY

GenerationType.IDENTITY 전략을 사용하면 데이터베이스의 자동 증가 열에 기반한 식별자를 생성합니다. 즉, 데이터베이스 테이블에서 실행할 때마다 자동으로 ID가 증가하는 특수한 열을 사용합니다. MySQL, PostgreSQL, SQL Server 등의 데이터베이스에서 사용됩니다.

@Entity
public class EntityIdentity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    // ...
}

👉GenerationType.SEQUENCE

GenerationType.SEQUENCE 전략에서는 ID 생성을 위해 데이터베이스의 시퀀스를 사용합니다. 시퀀스는 특정 데이터베이스(예: 오라클, PostgreSQL)에서 고유한 값을 생성하는 데 사용되는 객체입니다. 시퀀스를 사용하려면 적절한 @SequenceGenerator 어노테이션을 추가해야 합니다. 이를 통해 시퀀스 이름, 초기 값, 할당 크기 등을 지정할 수 있습니다.

@Entity
public class EntitySequence {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "custom_sequence")
    @SequenceGenerator(name = "custom_sequence", sequenceName = "example_seq",
                       initialValue = 1, allocationSize = 50)
    private Long id;
    
    // ...
}

👉GenerationType.TABLE

GenerationType.TABLE 전략에서는 별도의 데이터베이스 테이블로부터 ID 값을 생성합니다. JPA는 특별한 테이블을 사용하여 키 생성 이력을 관리합니다. 이 전략은 시퀀스를 제공하지 않는 데이터베이스 시스템에서 유용합니다. 메모리 DB를 사용할 때 이 전략이 효과적입니다. 이를 사용하려면 @TableGenerator 어노테이션을 추가하고 테이블 이름, 생성할 ID 값의 열, 할당 크기 등을 지정해야 합니다.

@Entity
public class EntityTable {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "table_generator")
    @TableGenerator(name = "table_generator", table = "id_table", pkColumnName = "entity_name",
                    valueColumnName = "id_value", initialValue = 1, allocationSize = 100)
    private Long id;
    
    // ...
}


위와 같은 전략을 사용하여 JPA 엔티티의 식별자를 생성할 수 있습니다. 특정 프로젝트의 데이터베이스 및 요구 사항에 맞게 선택해야 합니다. 이를 통해 엔티티의 식별자 생성에 있어 다양한 요구 사항에 대응할 수 있습니다. 사용 중인 데이터베이스, JPA 구현체 및 성능 요구 사항 등에 따라 적절한 전략을 선택해야 합니다.

profile
서버 백엔드 개발자

2개의 댓글

comment-user-thumbnail
2023년 8월 8일

좋은 글 감사합니다.

1개의 답글