하이버네이트 자동 키 생성 전략

2022. 3. 24. 12:49BackEnd(Java)/Spring Data JPA

 

현재 JPA(Hibernate) + Mysql로 연동하는 프로젝트를 진행 하던 중 아래의 그림 1을 보고 왜 저 테이블을 만들지?? 라는것이 궁금해서 구글링을 통해찾아보게 되었다.

그림 1 - 스프링 부트 실행 결과 및 Mysql 워크벤치 테이블 생성 결과

DB는 테이블의 기본 키(PK)를 선정 할 때 두가지 방법이 있는데, 자연키(ex. 주민등록번호, 이메일 등) 와 대체키(의미없는 일련의 번호)로 구성된다.

JPA는 테이블을 생성할 때 기본 키를 대체키로 생성한다. (사용법은 아래 소스코드 참조)

@Entity
@Getter @Setter
public class test{

  @Id @GeneratedValue   //@GeneratedValue == @GeneratedValue(strategy = GenerationType.Auto)
  private int id;
}
 

테이블 생성전략

(테이블의 기본키를 생성하는 전략에는 총 4가지가 있는데 기본값은 AUTO이다.)

생성 전략
설명
AUTO
(default)
JPA 구현체가 자동으로 생성 전략을 결정한다.
IDENTITY
기본키 생성을 데이터베이스에 위임한다. 예를 들어 MySQL의 경우 AUTO_INCREMENT를 사용하여 기본키를 생성한다.
SEQUENCE
데이터베이스의 특별한 오브젝트 시퀀스를 사용하여 기본키를 생성한다.
TABLE
데이터베이스에 키 생성 전용 테이블을 하나 만들고 이를 사용하여 기본키를 생성한다.

 

Mysql은 아래의 test클래스의 테이블을 만들 때 테이블 키 생성 전략을 디폴트로 지정하게 되면 table을 전략으로 생성하게 된다.(자세한건 아래 참조글 정독 바랍니다..)

그래서 위의 그림1과 같이 hiberante_sequence 테이블을 생성하게 된다.

그래서 나는 기본키 매핑 전략에 Auto -> Identity 전략으로 바꿔 사용하고 진행 중...

반응형