기본키(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 자동 생성기능까지 설정해두면 시퀀스까지 자동으로 생성해준다. 데이터베이스가 정해지지 않았거나 프로토 타입을 만들 경우에 유용한 전략이다.
'Programming > 과거포스팅' 카테고리의 다른 글
자바 람다식(Java Lambda Expression) (0) | 2017.04.23 |
---|---|
[JPA] - 연관관계 매핑1 (0) | 2016.12.27 |
[JPA] - 엔티티 매핑(Entity Mapping) (0) | 2016.12.19 |
[JPA] - 영속성 컨텍스트(persistence context)의 특징 (0) | 2016.12.18 |
[JPA] - 영속성 컨텍스트(persistence context) 와 엔티티의 생명주기 (0) | 2016.12.16 |