본문 바로가기

Programming/과거포스팅

[JPA] - 기본 키(Primary Key) 매핑

기본키(Primary Key) 매핑



앞의 포스팅에서 기본 키는 @Id 어노테이션을 사용해서 직접 할당했다.  

하지만 실제 업무에서는 직접할당이 아닌 자동할당을 많이 사용한다.

오라클은 SEQUENCE를 사용하고 MySQL은 AUTO_INCREMENT를 사용한다. 데이터 베이스마다 기본키를 생성하는 방법이 다른데 JPA에서는 이것을 해결하기 위해 몇가지 전략이 존재한다.


직접할당 : 기본키를 어플리케이션에 직접 할당한다. (앞의 포스팅에서 사용한 전략)

자동생성 : 

- IDENTITY : 기본 키 생성을 데이터베이스에 위임

- SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다.

- TABLE : 키 생성 테이블을 사용한다.

- AUTO : 해당 테이블에 맞는 전략을 자동으로 선택

- IDENTITY나 SEQUENCE 전략은 데이터베이스에 의존하고 TABLE전략은 데이터베이스에서 자유롭다.



IDENTITY 전략

IDENTITY는 AUTO_INCREMENT 기능이 있는 MySQL과 같은 데이터베이스에서 사용하며 다음과 같이 사용하면 된다.

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;


SEQUENCE 전략

시퀀스 전략은 시퀀스를 사용하는 데이터베이스에 사용하면 된다.  시퀀스 전략은 Entity에 SequenceGenerator을 정의하고 컬럼에 해당 Generator Name을 작성하여 매핑하면 된다.

코드로 보면 다음과 같다.

@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 String id;


AUTO전략

@GeneratedValue에 아무 조건도 주지 않으면 JPA가 해당 데이터베이스에 맞는 전략을 선택한다. DDL 자동 생성기능까지 설정해두면 시퀀스까지 자동으로 생성해준다. 데이터베이스가 정해지지 않았거나 프로토 타입을 만들 경우에 유용한 전략이다.