Galera, tenho uma pergunta simples para uma situação muito louca.
No meu sistema tem o seguinte código:
public boolean descricaoCadastrada(T adesao) {
Criteria criteria = sessao.createCriteria(this.classePersistente);
criteria.add(Restrictions.eq("descricao", adesao.getDescricao()));
criteria.add(Restrictions.ne("id",adesao.getId()));
return (criteria.uniqueResult() != null);
}
debugando o código quando o comando criteria.uniqueResult() vai ser executado, o comando SQL que aparece no console é: Hibernate: update Adesao set ativo=?, descricao=?, detalhamento=?, duracao=?, gratis=? where id=?
Bem, uma exceção é gerada porque o campo descrição é obrigatório…
O fato é que eu estou tentando alterar um objeto e esse método testa se existe alguma adesão cadastrada com a descrição cadastrada…
Já tentei de tudo e não consigo entender.
Segue abaixo a exceção gerada:
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:41)
at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:969)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1562)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:305)
at apisaas.adesao.AdesaoDAOHibernate.descricaoCadastrada(AdesaoDAOHibernate.java:28)
at apisaas.adesao.AdesaoBusinessStrategy.validarDescricaoCadastrada(AdesaoBusinessStrategy.java:66)
at apisaas.adesao.AdesaoBusinessStrategy.validarAoSalvar(AdesaoBusinessStrategy.java:51)
at apisaas.adesao.AdesaoBusiness.salvar(AdesaoBusiness.java:36)
at apisaas.adesao.AdesaoBusiness.main(AdesaoBusiness.java:89)
Caused by: java.sql.BatchUpdateException: Duplicate entry 'Adesao2' for key 'descricao'
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:657)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
... 13 more