(JPA 프로그래밍) @ID 기본 키 할당 전략(IDENTITY, SEQUENCE)

기본 키를 애플리케이션에 직접 할당하기 위해 @ID 주석만 사용하는 것 외에 DB에서 생성된 값을 사용하는 다른 방법은 무엇입니까? 이 기사에서는 이 문제를 해결하기 위한 JPA의 전략을 살펴봅니다.

1. 기본 키 직접 할당 전략(기존)

즉, 데이터베이스가 아닌 애플리케이션에서 생성된 기본 키에서 직접 기본 키를 할당하는 방식입니다.

엔터티 클래스에서 @ID 주석을 통해 매핑하고 로직에서 em.persist()를 사용하여 엔터티를 저장하기 전에 애플리케이션에서 직접 기본 키를 할당합니다.

public class User {

 @ID
 @Column(name = "id")
 private String id;

}

------------------------------------------------

Board board = new Board();
board.setId("id1"); // 여기서 직접 할당해준다.

em.persist(board);

2. 신원

IDENTITY는 응용 프로그램이 아닌 데이터베이스의 기본 키 생성 전략입니다.

MySQL, 데이터 베이스, 데이터 베이스직접 기본 키 할당과 달리 MySQL의 경우 AUTO_INCREMENT 함수를 사용하면 DB가 자동으로 값을 설정하고 순서대로 삽입한다.

또한 직접 기본 키 할당 방식에서는 @ID만 제공되며, 생성된 가치 식별자 생성 전략은 속성을 통해 설정해야 합니다.

IDENTITY는 위와 같이 Primary Key를 DB에 생성하므로, Primary Key는 DB에 데이터를 저장한 후에만 조회할 수 있습니다.

대신 Statement.getGeneratedKeys()를 사용하면 저장 시 생성된 기본 키 값을 검색할 수 있습니다.

@Entity
public class Board {
	
    @ID
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 식별자 생성 전략
    private Long id;
}

3. 시퀀스

고유한 값을 순차적으로 생성하는 전략. 시퀀스 지원 데이터베이스 사람 신탁, 데이터 베이스, 수소 등 사용 순서 먼저 DB에 SEQUENCE를 생성하고 엔티티의 ID를 매핑합니다.

@시퀀스 생성기등록 시퀀스 생성기 JPA입니다.

시퀀스 이름 실제 데이터베이스에서 속성 이름 및 매핑으로 생성된 시퀀스 이름하다.

다음으로 @GeneratedValue에서 SEQUENCE로 키 생성 전략을 설정합니다.

생성기는 @SequenceGenerator로 등록된 시퀀스 생성기를 선택합니다.

이 경우 이제 id의 식별자 값에서 “시퀀스 이름”시퀀스 생성기가 할당됩니다.

@Entity
@SequenceGenerator(name = "시퀀스 이름", sequenceName = "매핑할 DB의 시퀀스 이름", initialValue = 1, allocationSize = 1)
public class Board {

  @ID
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "시퀀스 이름"
  private Long id;
}