모각코 13주차 모임 결과 (22.09.29 / 목요일 / 15시 ~ 18시 / Google Meet)

KIMA·2022년 10월 2일
0
post-thumbnail

목표

Entity ID 매핑 전략 공부

결과

IDENTITY 전략

  • 기본 키 생성을 데이터베이스에 위임하는 전략이다.
  • 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용한다.
    • MySQL의 AUTO_INCREMENT 기능은 데이터베이스가 기본 키를 자동으로 생성한다.
  • 데이터를 DB에 INSERT한 후 기본 키 값을 조회할 수 있다.
    따라서 엔티티에 식별자 값을 할당하려면 JPA는 추가로 데이터베이스를 조회해야 한다.
    JDBC3에 추가된 Statement.getGeneratedKeys()를 사용하면 데이터를 저장하면서 동시에 생성된 기본 키 값도 얻어 올 수 있다.
    하이버네이트는 이 메소드를 사용해서 데이터베이스와 한 번만 통신한다.
  • 엔티티가 영속 상태가 되려면 식별자가 반드시 필요하다.
    그런데 IDENTITY 식별자 생성 전략을 엔티티를 데이터베이스에 저장해야 식별자를 구할 수 있으므로 em.persist()를 호출하는 즉시 INSERT SQL이 데이터베이스에 전달된다.
    따라서 이 전략은 트랜잭션을 지원하는 쓰기 지연이 동작하지 않는다.

SEQUENCE 전략

  • DB 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트
    다.

  • SEQUENCE를 사용해서 기본 키를 생성한다.

  • 시퀀스를 지원하는 오라클, PostgreSQL, DB2, H2 데이터베이스에서 사용할
    수 있다.

  • 시퀀스 DDL

    CREATE TABLE BOARD(
      ID BIGINT NOT NULL PRIMARY KEY,
      DATA VARCHAR(255)
    )
    CREATE SEQUENCE BOARD_SEQ START WITH 1 INCREMENT BY 1;
  • 시퀀스 매핑 코드

    @Entity
    @SequenceGenerator(
      name = “BOARD_SEQ_GENERATOR”,
      sequenceName = “BOARD_SEQ”,
      initialValue = 1,
      allocationSize = 1
    )
    public class Board {
      @Id
      @GeneratedValue(strategy = GenerationType.SEQUENCE,
      generator = “BOARD_SEQ_GENERATOR”)
      private Long Id;
    }

Reference
도서) 자바 ORM 표준 JPA 프로그래밍

profile
안녕하세요.

0개의 댓글