BE/JPA

[JPA] 9. 기본키 매핑

멍목 2022. 4. 17. 14:08
반응형

자바 ORM 표준 JPA 프로그래밍

 

 

 

 

 

이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다.

 

 

 

1. 기본 키 매핑 

1) 직접 할당

  • @Id : 직접 키 값을 넣어줄 경우 사용

 

2) 자동 생성

  • @GeneratedValue
    • IDNETITY : 데이터베이스에 위임 (MYSQL 사용 가능)
      • 기본 키 생성을 DB에 위임
      • 주로 MySQL, OstgreSQL, SQL Server 에서 사용
      • ex) MySQL AUTO_INCREMENT
      • JPA는 보통 트랜잭션 커밋 시점에 INSERT 쿼리를 날림
      • IDENTITY 는 em.persist() 시점에 즉시 INSERT 쿼리를 날려서 PK값(식별자)를 알 수 있음
    • SEQUENCE : 데이터베이스 시퀀스 사용 (ORACLE 사용 가능)
      • @SequenceGenerator
        • name : 식별자 생성기 이름 (필수)
        • sequenceName : DB의 시퀀스 이름 (기본값 : hibernate_sequence)
        • initialValue : DDL 생성 시에만 사용, 시퀀스 DDL을 생성할 때 처음 시작하는 수를 지정(기본값 : 1)
        • allocationSize : 시퀀스 한 번 호출에 증가하는 수. 시퀀스 값이 1씩 증가하면 1로 설정 (기본값 : 50)
        • catalog, schema : 데이터베이스 catalog, schema 이름 지정
    • TABLE : 키 생성용 테이블 사용 (모든 DB 사용 가능)
      • 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략 
      • @TableGenerator
        • name : 식별자 생성기 이름 (필수)
        • table : 키 생성 전용 테이블 이름 (기본값 : hibernate_sequence)
        • pkColumnName : 시퀀스 컬럼명 (기본값 : sequence_name)
        • valueColumnNa : 시퀀스 값 컬럼명 (기본값 : next_val)
        • pkColumnValue : 키로 사용할 값 이름 (기본값 : 클래스 이름)
        • initialValue : 초기 값, 마지막으로 생성된 값이 기준. (기본 값 : 0)
        • allocationSize : 시퀀스 한 번 호출에 증가하는 수 (기본값 : 50)
        • catalog, schema : 데이터베이스 catalog, schema 이름 지정
        • uniqueConstraints (DDL) : 유니크 제약 조건 지정
    • AUTO : 방언에 따라 자동 지정 (기본값)

 

allocationSize : DB의 Sequence에서 미리 여러개를 가져오는 것. (웹서버에서 미리 여러개를 호출해둠)

 

권장하는 식별자 형식

  • 기본 키 제약 조건 : null X, 유일한 값, 변하지 않는 값
  • 권장 : Long형 + 대체키 + 키 생성 전략

 

 

반응형