본문 바로가기

Jpa

기본 키 매핑 (@ID, @GeneratedValue)

@ID 

● 직접 할당 : @Id만 사용

@Id

 

@GenratedValue

● 자동생성(@GeneratedValue)

● IDENTITY - 데이터 베이스에 위임 , MYSQL

  ○ 기본 키 생성을 데이터베이스에 위임

  ○ JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행

  ○ AUTO_INCREMENT는 데이터 베이스에 INSERT SQL을 실행한 이후에 ID값을 알 수 있음

  ○ IDENTITY 전략은 em.persist() 즉 영속성컨텍스트에 추가될 때 INSERT SQL 실행하여 DB에서 식별자를 조회

@GeneratedValue(strategy = GenerationType.IDENTITY)

 

● SEQUENCE - 데이터 베이스 시퀀스 오브젝트 사용, ORACLE

  - @SequenceGenerator 필요

@SequenceGenerator(
        name = "MEMBER_SEQ_GENERATOR",
        sequenceName = "MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
        initialValue = 1, allocationSize = 1)
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
            generator = "MEMBER_SEQ_GENERATOR")

  ○ 데이터 베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트 ex) 오라클 시퀀스

 

● TABLE - 키 생성용 테이블 사용, 모든 DB에서 사용

 - @TableGenerator 필요

  ○ 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내

  ○ 장점은 모든데이터베이스에서 적용가능하나 단점은 성능이다.

@TableGenerator(
        name = "MEMBER_SEQ_GENERATOR",
        table = "MY_SEQUENCES",
        pkColumnValue = "MEMBER_SEQ", allocationSize = 1)
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE,
            generator = "MEMBER_SEQ_GENERATOR")

 

● AUTO - 방언에 따라 자동 지정, 기본값

 

권장 - 식별자 전략

● 기본키 제약 조건 : null 아님, 유일, 변하면 안됨

● 대체키 사용

● LONG형 , 키 생성전략 사용, 대체키 사용

 

 출처 - https://www.inflearn.com/course/ORM-JPA-Basic

'Jpa' 카테고리의 다른 글

JPA 프록시의 특징  (0) 2024.07.06
연관관계 매핑  (1) 2024.07.02
엔티티 매핑 (필드, 컬럼)  (0) 2024.07.02
영속성 컨텍스트  (0) 2024.07.02
JPA application.yml 설정  (0) 2024.07.01