Hibernate에서 GenerationType을 AUTO로 설정하면 db마다 적절한 타입을 선택해준다고 한다.
나는 MySQL을 연결해 JPA를 학습 중인데 예제와 다르게 동작하는 부분이 있어서 찾아봤다.
결론은 Hibernate 버전마다 다른 타입을 선택하고 있었다.
당연히 IDENTITY(auto_increment)를 선택할 줄 알았는데 최신 버전에서는 아래와 같이 시퀀스테이블을 만들어서 id값을 생성해주고 있는듯하다.

JPA의 영속성컨텍스트에서 엔티티가 관리되려면 id값이 반드시 있어야 하는데, auto_increment의 경우 DB가 기본키를 생성하기 때문에 insert가 되어야만 id값을 알 수 있다. 실제로 em.persist() 시점에 insert쿼리가 날아간다.
이런 특성은 JPA에서 다량의 insert쿼리를 한번에 처리하여 성능을 개선하는 bulk insert를 사용할 수 없게 한다고 한다. (하지만 JdbcTemplate 등을 통해 해결할 수 있는 부분인 것 같다. 링크)