Estou implementando a interface IdentifierGenerator para customizar as próprias sequencies do sistema.
Criei uma classe de teste que adiciona algumas Entidades que usam essa estratégia da sequence customizada, porém estando o banco vazio ele roda ok e gera com sucesso todos os registros no banco com a seqüência ok, agora na segunda vez que eu executo a classe(vi no console sequencias diferentes das que foram para o banco) ele gera erro de constrainst, alegando que não pode inserir por causa de duplicação de ID.
Realmente não entendi por que, já que as IDs geradas eu identifiquei que foram novas e diferentes das listadas no banco e mesmo em runtime não gerou nenhuma ID repetida.
import java.io.Serializable;
import java.util.Random;
import org.hibernate.HibernateException;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.id.IdentifierGenerator;
/**
*
* @date 09/01/2008
* @since 1.0
* @version 1.0
* por Inocêncio T. de Oliveira
*/
public class GerarID implements IdentifierGenerator {
public Serializable generate(SessionImplementor pSession, Object pObj) throws HibernateException {
Serializable lPkValue = null;
Long lId = 0l;
String lTemp = "";
if (JPASyncUtil.getMode() == JPASyncUtil.DB_STATUS_DEFAULT) {
//temporariamente usada
lTemp = String.valueOf((Math.abs(new Random().nextInt())) / 1000) +
String.valueOf(new java.util.Date().getTime() / 100);
lId = Long.valueOf(lTemp);
lPkValue = lId;
}
return lPkValue;
}
}
Erro:
Caused by: java.sql.SQLException: Violation of UNIQUE KEY constraint 'UQ__ADT_AUDITORIA__7D39791C'. Cannot insert duplicate key in object 'ADT_AUDITORIA'.
Na entidade de Auditoria eu não declarei o atributo uniqueConstraints da anotação @Table para também evitar esse tipo de problema, mas não caso não resolve nada.
Alguém tem alguma sugestão para o problema ou idéia de implementação de identificador customizado?
Obrigado!