[JPA] Hibernate 버전별 MySQL GenerationType.AUTO

aqualung·2024년 10월 14일
post-thumbnail

Hibernate 버전별 GenerationType.AUTO

Hibernate에서 GenerationTypeAUTO로 설정하면 db마다 적절한 타입을 선택해준다고 한다.

나는 MySQL을 연결해 JPA를 학습 중인데 예제와 다르게 동작하는 부분이 있어서 찾아봤다.

결론은 Hibernate 버전마다 다른 타입을 선택하고 있었다.

  • 버전4 - IDENTITY
  • 버전5 - TABLE
  • 버전6 - SEQUENCE

당연히 IDENTITY(auto_increment)를 선택할 줄 알았는데 최신 버전에서는 아래와 같이 시퀀스테이블을 만들어서 id값을 생성해주고 있는듯하다.


IDENTITY타입의 문제점

JPA의 영속성컨텍스트에서 엔티티가 관리되려면 id값이 반드시 있어야 하는데, auto_increment의 경우 DB가 기본키를 생성하기 때문에 insert가 되어야만 id값을 알 수 있다. 실제로 em.persist() 시점에 insert쿼리가 날아간다.

이런 특성은 JPA에서 다량의 insert쿼리를 한번에 처리하여 성능을 개선하는 bulk insert를 사용할 수 없게 한다고 한다. (하지만 JdbcTemplate 등을 통해 해결할 수 있는 부분인 것 같다. 링크)

0개의 댓글