twocowsong

IDENTITY 전략 본문

IT/JPA

IDENTITY 전략

WsCode 2022. 5. 13. 22:55

깃허브 정리 URL : https://github.com/sWineTake/jpa.git

 

GitHub - sWineTake/jpa: 자바 ORM 표준 JPA 프로그래밍 - 김영한

자바 ORM 표준 JPA 프로그래밍 - 김영한. Contribute to sWineTake/jpa development by creating an account on GitHub.

github.com

IDENTITY는 기본 키 생성을 DB에 위임하는 전략입니다.

 

예를 들어 MySql의 AUTO_INCREMENT 기능은 DB 기본 키를 자동으로 생성해줍니다.

MySql에서 특정 컬럼의 아래와같이 생성시키면 자동으로 순차적으로 번호를 생성하여 ROW를 추가합니다.

CREATE TABLE BOARD(
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    DATA VARCHAR(255)
);

테이블 생성 시 기본 키 컬럼인 ID에 AUTO_INCREMENT를 추가하였습니다.

이제 부터는 순차적으로 ID값을 자동으로 채워줍니다.

 

(본 글에서는 AUTO_INCREMENT 상세 내용은 넘어가겠습니다.)

 

IDENTITY전략은 지금 설명한 AUTO_INCREMENT를 사용한 DB값을 저장하고 나서야 기본 키 값을 구할 수 있을 때 사용합니다. 

개발자가 엔티티에 직접 식별자를 할당하면 @Id 어노테이션만 있으면 되지만 지금처럼 식별자가 생성되는 경우에는 @GeneratedValue어노테이션을 사용하고 식별자가 생성 전략을 선택해야 합니다.

 

IDENTITY전략을 사용하려면 @GeneratedValue의 strategy속성 값을 GenerationType.IDENTITY로 지정하면 됩니다.

이 전략을 사용하면 JPA는 기본 키 값을 얻어오기 위해 DB를 추가로 조회합니다.

@Getter
@Setter
@Entity
public class Board {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
}
Member member = new Member();
em.persist();
System.out.println("board.id = " + member.getId());

 

em.persist()를 호출해서 엔티티를 저장한 직후 할당된 식별자 값을 출력했습니다.

출력된 값은 저장 시점에 DB가 생성 한 값을 JPA가 조회한 것입니다.

 

여기서 중요한 점이 있습니다.

IDENTITY전략은 DB에 INSERT한 후에 기본 키 값을 조회할 수 있습니다.

따라서 엔티티에 식별자 값을 할당하려면 JPA는 추가로 DB에 조회해야 합니다.

JDBC3에 추가된 Statement.getGeneratedKeys()를 사용하면 데이터를 저장하면서 동시에 생성된 기본 키 값도 얻어 올 수있습니다. 하이버네이트는 이 메소드를 사용해서 DB와 한번만 통신합니다.

 

엔티티가 영속 상태가 되려면 반드시 식별자가 필요합니다.

그런데 IDENTITY 식별자 생성 전략은 엔티티를 DB에 저장해야 식별자를 구할 수 있으므로 em.persist()를 호출하는 즉시 INSERT SQL이 DB에 전달됩니다. 따라서 이 전략은 트랜잭션을 지원하는 쓰기지연이 동작하지않습니다.

 

 

 

'IT > JPA' 카테고리의 다른 글

TABLE 전략  (0) 2022.05.15
SEQUENCE 전략  (0) 2022.05.14
기본 키 직접 할당 전략  (0) 2022.05.13
기본키 매핑 - 기본 키 생성 전략  (0) 2022.05.11
DDL생성 기능 - 제약 조건, 유니크 제약 조건  (0) 2022.05.10