JPA에서 사용하는 시퀀스 전략에 대해서 정리해 보았다.📖
AUTO_INCREMENT(GenerateType.IDENTITY)
설명
- DB에 jpa로 데이터가 insert 된 후에 DB에서 기본키 생성을 하게 하는 방법이다.
특징
- 커밋 전에 데이터를 DB에 insert 수행
1.1. 보통의 JPA 의 데이터 insert의 경우 영속성 컨텍스트에서 커밋 직전까지 insert 쿼리를 버퍼 해서 commit이 되면 db에 데이터를 insert 하는데, 이 경우에는 insert를 커밋되기 전에 수행 함.
-> 디비에서 기본키를 생성 하기 때문에 JPA 입장에서는 @Id의 value를 알 수 없음. 따라서 커밋 전에 데이터를 insert 후 jpa 에서 select를 해옴
- 기본키 생성을 DB에 위임.
코드
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
GenerateType.SEQUENCE
설명
- DB에서 이미 생성되어 있는 시퀀스를 JPA에서 가져다 사용하는 방식
특징
- 테이블에 이미 시퀀스가 있어야함.
- JPA 입장에서는 DB에 이미 생성 되어있는 시퀀스의 정보를 가져와서 엔티티에 할당
코드
@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;
Reference
인프런 - 김영한 JPA 강의