Obtendo erros de entrada duplicados do Hibernate, o MySQL é o culpado?

Eu estou trabalhando em um aplicativo de banco de dados que é principalmente de leitura, mas há uma tabela que registra o movimento do usuário no aplicativo e tem um grande número de gravações para ele. Para cada alguns milhares de gravações, vemos algumas exceções no log de erros da seguinte forma:

[WARN][2009-07-30 11:09:20,083][org.hibernate.util.JDBCExceptionReporter] SQL Error: 1062, SQLState: 23000
[ERROR][2009-07-30 11:09:20,083][org.hibernate.util.JDBCExceptionReporter] Duplicate entry '17011' for key 1
[ERROR][2009-07-30 11:09:20,083][org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
  at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
  at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
  at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)

A tabela em questão tem o seguinte esquema:

CREATE TABLE IF NOT EXISTS `my_table` (
  `id` int(11) NOT NULL,
  `data1` int(11) NOT NULL,
  `data2` int(11) NOT NULL,
  `timestamp` datetime default NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

E o XML de mapeamento do Hibernate correspondente:

<hibernate-mapping>
  <class name="mycorp.MyClass" table="my_table">
    <id name="id" column="id" type="java.lang.Integer">
      <generator class="increment"/>
    </id>
    <property name="data1" column="data1" type="java.lang.Integer"/>
    <property name="data2" column="data2" type="java.lang.Integer"/>
    <property name="timestamp" column="timestamp" type="java.util.Date"/>
  </class>
</hibernate-mapping>

É possível, embora improvável, que várias instâncias de nosso aplicativo da Web possam ser gravadas no banco de dados de uma só vez, já que os números de versão em nosso contexto de aplicativo web liberam continuamente novas versões dos aplicativos. Os clientes com a versão antiga do aplicativo armazenada em cache em seu navegador da Web acessariam, assim, as versões antigas do servidor, que foram removidas após algumas semanas.

De qualquer forma, não estou convencido de que este seja o problema, mas desconfio que haja algum problema de sincronização entre o MySQL e o Hibernate aqui. Mudar meu gerador para sequência, seqhilo ou hilo ajuda? Além disso, se você puder fornecer um exemplo de como configurar um gerador no MySQL, isso seria muito útil, já que a maioria dos recursos on-line é simplesmente copiada e colada dos exemplos lamentavelmente minimalistas no manual do Hibernate.

questionAnswers(1)

yourAnswerToTheQuestion