Post

Entity_Mapping[기본키 매핑]

Entity Mapping

기본키 매핑

Spring에서 기본키 매핑은 JPA을 통해 이루어집니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Entity(name = "testUser")
@Table
public class testUser {
    @Id
    @Column(name = "id")
    private Long id;

    @Column(name = "user_name")
    private String name;

    private Integer age; 

    @Enumerated(EnumType.STRING) 
    private RoleType roleType; 

    @Temporal(TemporalType.TIMESTAMP) 
    private Date createdDate; 

    @Temporal(TemporalType.TIMESTAMP) 
    private Date lastModifiedDate; 

    @Lob 
    private String description; 
    //Getter, Setter… 
}

매핑 어노테이션 정리

@Id

  • 직접 할당하는 어노테이션입니다.
  • 옵션은 없습니다.

@GeneratedValue(strategy = GenerationType.XXX)

1. IDENTITY

특징

  • 기본 키 생성을 데이터베이스에 위임합니다.
  • 주로 DB가 MYSQL, PostgreSQL, SQL Server, DB2일때 사용합니다.
  • em.persist() 시점에 즉시 INSERT SQL을 실행하고, DB에서 식별자를 조회 합니다.

2. SEQUENCE

특징

  • 데이터베이스 시퀸스 오브젝트에 사용됩니다.
  • 주로 DB가 ORACLE, PostgreSQL, DB2, H2일떄 사용됩니다.
  • @SequenceGenerator가 필요합니다.
  • 유일한 값을 순서대로 생성하는 특별한 DB 오브젝트 입니다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    @Entity 
    @SequenceGenerator( 
     name = MEMBER_SEQ_GENERATOR", 
     sequenceName = “MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
     initialValue = 1, allocationSize = 1) 
    public class Member { 
     @Id 
     @GeneratedValue(strategy = GenerationType.SEQUENCE, 
     generator = "MEMBER_SEQ_GENERATOR") 
     private Long id;
    }
    

    @SequenceGenerator 속성

  • name : 식별자 생성기 이름 입니다.
    • 필수입니다.
  • sequenceName : DB에 등록되어 있는 시퀸스 이름입니다.
  • initialValue : DDL 생성시에만 사용됩니다.
    • 기본값은 1입니다.
  • allocationSize : 시퀸스 한 번 호출에 증가하는 값 입니다.
    • 기본값은 50입니다.
  • catalog, schema : DB catalog, Schema 이름입니다.

3. TABLE

특징

  • 키 생성용 테이블을 사용합니다.
  • 모든 DB에서 사용이 가능합니다.
  • @TableGenerator가 필요합니다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    @Entity 
    @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") 
     private Long id;
     }
    

    @TableGenerator 속성

  • name : 식별자 생성기 이름을 지정합니다.
    • 필수입니다.
  • table : 키생성 테이블명을 지정합니다.
  • pkColumnName : 시퀸스 컬럼명을 지정합니다.
  • valueColumnNa : 시퀸 스 값 컬럼명을 지정합니다.
  • pkColumnValue : 키로 사용할 값 이름을 지정합니다.
  • initialValue : 초기 값, 마지막으로 생성된값이 기준입니다.
    • 기본값은 0 입니다.
  • allocationSize : 시퀸스 한 번 호출에 증가하는 수 입니다.
    • 기본값은 50입니다.
  • uniqueConstraints(DDL) : 유니크 제약 조건을 지정할 수 있습니다.

AUTO

  • 방언에따라 자동으로 지정합니다.
  • Default 입니다.

결론

Spring에서 JPA를 사용하여 엔터티 클래스의 기본키를 매핑하는 방법은 @Id 어노테이션을 통한 직접 할당과, @GeneratedValue 어노테이션을 통한 자동 생성 전략을 사용하는데, 자동 생성 전략에는 IDENTITY, SEQUENCE, TABLE, 그리고 AUTO가 있습니다.

IDENTITY는 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용되며, 데이터베이스에 기본 키 생성을 위임하고 즉시 INSERT SQL을 실행하여 DB에서 식별자를 조회합니다.

SEQUENCE는 ORACLE, PostgreSQL, DB2, H2와 같은 데이터베이스에서 활용되며, 데이터베이스 시퀸스 오브젝트를 활용하여 유일한 값을 순차적으로 생성합니다.

TABLE은 모든 데이터베이스에서 사용 가능하며, 키 생성용 테이블을 활용합니다.

마지막으로 AUTO는 방언에 따라 자동으로 적절한 전략을 선택하며, 주로 기본값(Default)으로 사용됩니다.

This post is licensed under CC BY 4.0 by the author.