기본키 매핑

  • @Id와 @GeneratedValue의 조합으로 사용
  • @Id만 사용 : 직접 할당
  • @GeneratedValue - startegy 속성
    • IDENTITY : 데이터베이스에 위임 (MySQL)
    • SEQUENCE : 데이터베이스 시퀀스 (Oracle)
    • TABLE : 키 생성 전용 테이블을 만듬 (모든 DB에 적용 가능하나, 성능이 안 좋음 )
    • AUTO : 데이터베이스 방언에 맞춰서 알아서 생성

@GeneratedValue(strategy = GenertaionType.IDENETITY)

  • MySQL, PostgreSQL에서 사용
  • DB가 알아서 기본키를 생성해주므로 해당 ID값을 파악하기 위해선 DB로 가봐야 함
  • SEQUENCE와 달리 commit 시점이 아닌 persist를 호출하는 시점에 실제로 insert 쿼리가 DB에 날라감
  • ID값을 조회할 땐 insert로 값을 넣은 후, select 없이 ID값을 리턴받을 수 있게 돼있음

@GeneratedValue(strategy = GenertaionType.SEQUENCE)

  • Oracle, H2, PostgreSQL에서 사용
  • 엔티티 자체에 @SequenceGenerator를 활용하여 매핑을 원하는 DB 시퀀스에 매핑할 수 있음
  • @GeneratedValue에 generator 옵션에 해당 Generator의 이름을 부여해줌
    • ex) @GenereatedValue(generator = “MY_SEQUENCE”)

@SeqeunceGenerator 속성

  • 엔티티에 붙여서 사용
  • initialValue : 시작 값
  • allocationSize
    • 시퀀스를 한 번 호출할 때 마다 증가하는 수 (성능 최적화에 사용, 50~100이 적정)
    • 미리 값만큼 시퀀스를 메모리에 올려두고 다 사용하면 다시 DB에 접근하는 방식



인프런 - 김영한님의 JPA 강의를 정리한 내용입니다.


김영한님 인프런 강의

댓글남기기