JPA [기본] 기본키 매핑

신재원·2023년 1월 24일
0

JPA 기본

목록 보기
7/31

기본키 매핑

기본 키 매핑 어노테이션

  • @Id
  • @GeneratedValue

기본 키 매핑 방법

  • 직접 할당 : @Id만 사용
  • 자동 생성 (@GeneratedValue)
    • IDENTITY : 데이터베이스에 위임, MYSQL
    • SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE
      • @SequenceGenerator 필요
    • TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용
      • @TableGenerator 필요
    • AUTO : 방언에 따라 자동 지정, 기본값

@GeneratedValue(strategy = GenerationType.IDENTITY)

  • 값을 세팅(set) X, 데이터베이스에 위임한다.
  • 즉, id 값을 null로 하면 데이터베이스가 알아서 AUTO_INCREMENT 해준다
  • null 값으로 보내진다.

@GeneratedValue(strategy = GenerationType.SEQUENCE)

  • 테이블 마다 시퀀스 오브젝트를 따로 관리하고 싶으면 @SequenceGenerator에 sequenceName 속성을 추가한다.
  • 즉 데이터베이스가 자동으로 숫자를 generate 해준다

@GeneratedValue(strategy = GenerationType.TABLE)

  • 잘 사용 X
  • 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략
  • 장점
    • 모든 데이터베이스에 적용 가능
  • 단점
    • 성능

권장하는 식별자 전략

  • 기본 키 제약 조건 : null 아님, 유일, 변하면 안된다.
  • 대리키 (대체키) 를 사용하자, (Sequence, UUID)
  • 예를 들어 주민등록번호도 기본 키로 적절하지 않다.
  • 권장 : Long형 + 대체키 + 키 생성 전략 사용

데이터 중심의 설계의 문제점


  • 예) Order 클래스에서 MEMBER_ID를 통해 누가 주문했는지 알수있게 짠 코드다.
  • 하지만 좋지 못한 코드이다. -> 이유는 Column name을 통해 맞춰 객체스럽지 못하고, 관계형 DB에 맞춘 설계이다.
  • 테이블의 외래키를 객체에 그대로 가져옴
  • 객체 그래프 탐색이 불가능하다.

0개의 댓글