Você tem que lembrar que o Hibernate é uma camada de persistência e precisa ser capaz de acompanhar onde um objeto está no banco de dados. Então, quando ele faz uma inserção, ele realmente precisará consultar o contador de incremento automático para ver qual deve ser o próximo ID. Em seguida, ele insere o ID no objeto e insere o objeto no banco de dados. Então, para o hibernate fazer no insert, ele precisa fazer um select primeiro (a menos que você esteja usando algum tipo de GUID gerado pelo aplicativo). Ao usar o incremento automático do mySQL, use o gerador de "identidade".
Explicação dos vários geradores:
http://www.roseindia.net/hibernate/hibernateidgeneratorelement.shtml
Um trecho de código XML de hibernação:
<id name="id" type="long" unsaved-value="null" >
<column name="uid" not-null="true"/>
<generator class="identity"/>
</id>