엔티티 매핑 - 기본 키 매핑

길셔·2022년 10월 16일
0

JPA

목록 보기
6/7
  • @Id

    • 기본적인 기본키 직접 생성 시 사용
  • @GeneratedValue

    • 기본키를 자동으로 생성
    • 예 : startegy = GenerationType.AUTO)

    1. IDENTITY : 기본키 생성을 DB에 위임

    • 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용
      • 예 : MySQL의 AUTO_INCREMENT)
    • JPA는 보통 트랜재션 커밋 시점에 INSERT SQL 실행
    • AUTO_INCREMENT는 DB에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있음
    • IDENTITY 전략은 em.persist() 시점에 즉시 INSERT SQL을 실행하고 DB에서 식별자를 조회

    2. SEQUENCE : DB 시퀀스 오브젝트 사용

    • DB 시퀀스는 유일한 값을 순서대로 생성하는 특별한 DB 오브젝트(예 : 오라클 시퀀스)

    • ORACLE은 @SequenceGenerator 필요

      @Entity
       @SequenceGenerator(
           	name = "MEMBER_SEQ_GENERATOR",
           	sequenceName = "MEMBER_SEQ", // 매핑할 DB 시퀀스 이름
          	initialValue = 1, allocationSize = 1)
       public class Member { 
          @Id
          @GeneratedValue(strateg = GenerationType.SEQUENCE,
             	generator = "MEMBER_SEQ_GENERATOR")
          private Long id;
       }
    • initialValue : 초기 값, 마지막으로 생성된 값이 기준이다.(기본값 0)

    3. TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용

    • 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략
      • 장점 : 모든 데이터베이스에 적용 가능
      • 단점 : 성능
      // 테이블 생성 
      create table MY_SEQUENCES(
          sequence_name varchar(225) not null,
          next_val bigint,
          primary key (sequence_name)
       )
       
       // 적용
       @Entity
       @TableGernerator(
             name = "MEMBER_SEQ_GENERATOR",
             table = "MY_SEQUENCES",
             pkColumnValue = "MEMBER_SEQ", allocationSize = 1)
       public class Member {
          @Id
          @GeneratedValue(strategy = GenerationType.TABLE, generator = "MEMBER_SEQ_GNERATOR")
       	private Long id;
       }
      • 키 생성 전용 테이블 만들고,
      • @GeneratedValue를 사용해서 적용
      • table은 키생성 테이블명으로 DB에서 사용할 이름(기본값:hibernate_sequene),
        name은 식별자 생성기 이름으로 호출해 사용할 이름,
        pkColumnValue는 시퀀스 컬럼명(기본값 : sequence_name)이고,
        allocationSize(기본값 : 50)은 시퀀스 호출 한번에 증가하는 수 (성능 최적화에 사용)이다. : 처음 insert 시 DB에서 50개를 한번에 만들어놓고 사용

    4. AUTO : 방언에 따라 자동 지정, 기본값

    5. 권장하는 식별자 전략

    • 기본 키 제약 조건 : null 아님, 유일, 변하면 안된다.
    • 미래까지 이 조건을 만족하는 자연키는 찾기 어렵다. 대리키(대체키)를 사용하자
      • 자연키 : 주민등록번호 ..
      • 대체키 : UUID, AUTO_SEQUENCE ..
    • 예를 들어 주민등록번호도 기본 키로 적절하지 않다.
    • 권장 : Long 형 + 대체키 + 키 생성전략 사용
      • 10억개가 넘어도 돌아가야하니까 Long형으로 하고,
      • 대체키에 키 생성전략이나 회사 내 사용하는 전략을 사용
profile
까먹지말자

0개의 댓글