[4단원] 기본 키 직접 할당 전략, IDENTITY 전략

기본 키 직접 할당 전략

  • 기본키를 직접 할당하기 위해 @Id 어노테이션 사용
@Id
@Column(name="id")
private String id;
  • @Id 어노테이션은
    • 자바 기본
    • 자바 래퍼
    • String
    • util.Date
    • sql.Date
    • math.BigDecimal
    • math.BigInteger
  • 직접 할당 전략은 어플 내에서 기본 키 직접 할당하고 엔티티를 저장하기 전에 이를 수행
    Board board = new Board();
    board.setId("id1");
    em.persist(board);

IDENTITY 전략

  • 기본 키 생성을 DB에 위임
  • MYSQL, PostgreSQL , SQL server 등에서 사용
CREATE TABLE BOARD (
  ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  DATA VARCHAR(255)
);

INSERT INTO BOARD (DATA) VALUES('A');
INSERT INTO BOARD (DATA) VALUES('B');
  • ID 컬럼은 AUTO_INCREMENT 속성을 가지고 있기에,
    • 데이터 저장 시 ID 컬럼 값을 명시 X , DB 자동으로 값 할당
@Entity
public class Board {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}
  • 식별자가 생성되는 경우 @GeneratedValue 사용
    • 전략 선택 필
    • IDENTITY 전략 사용시 strategy 속성을 GenerationType.IDENTITY 로 지정

주의

  • 엔티티가 영속 상태로 진입을 위해서는 식별자가 필수
  • IDENTITY 전략은 DB에 엔티티를 저장후에만 식별자를 얻을 수 있음
  • em.persis() 호출시
    • 즉시 INSERT SQL 이 DB 전달
    • 해당 행위는 쓰기 지연이 동작 하지 않음.
      • JDBC3 의 Statement.getGeneratedKeys() 메서드 사용시
      • 데이터 저장과 동시에 생성된 식별자 값을 얻을 수 있음
      • 하이버네이트는 해당 메서드로 DB와 한번만 통신


Uploaded by N2T