Erro ao excluir regitro

4 respostas
S

Pessoal estou com um probleminha na hora de excluir um registro da base de dados, entendam o caso: Tenho uma tabela de fornecedores onde essa tabela de fornecedores se relaciona com uma tabela de materiais e quando tento excluir um forncedor que esta associado a um material me da o seguinte erro:

11:10:51.182 ERROR [ComunicacaoTerminais.VerificaEvento] [JDBCExceptionReporter]  - ORA-02292: integrity constraint (DESSULFURACAO.FK_SILO_ASSOCIATI_FORNECED) violated - child record found

11:10:51.182 ERROR [ComunicacaoTerminais.VerificaEvento] [JDBCExceptionReporter]  - ORA-02292: integrity constraint (DESSULFURACAO.FK_SILO_ASSOCIATI_FORNECED) violated - child record found

11:10:51.182 ERROR [ComunicacaoTerminais.VerificaEvento] [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:96)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at com.arcelormittal.aplicacao.servidor.hibernateutil.HibernateGeneric.delete(HibernateGeneric.java:88)
	at com.arcelormittal.aplicacao.servidor.dao.FornecedorDao.excluir(FornecedorDao.java:24)
	at com.arcelormittal.aplicacao.servidor.model.fornecedor.FornecedorModel.excluirFornecedor(FornecedorModel.java:163)
	at com.arcelormittal.aplicacao.servidor.ComunicacaoTerminais.processaEvento(ComunicacaoTerminais.java:347)
	at com.arcelormittal.framework.kernel.ProcessoComunicacaoTerminais.recebeEvento(ProcessoComunicacaoTerminais.java:271)
	at com.arcelormittal.framework.base.processo.ProcessoBase$VerificaEvento.run(ProcessoBase.java:529)
Caused by: java.sql.BatchUpdateException: ORA-02292: integrity constraint (DESSULFURACAO.FK_SILO_ASSOCIATI_FORNECED) violated - child record found

	at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:367)
	at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:8739)
	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	... 13 more

até aqui blz entendo, porem quando crio um novo forncedor que não esta associado a ninguem e tento excluir me da outro erro que é esse aqui:

11:11:30.226 INFO  [ComunicacaoTerminais.VerificaEvento] [HibernateGeneric]  - Deletando: Fornecedor{fornId=54, fornDesc=sfagdjhgfy}
11:11:30.227 ERROR [ComunicacaoTerminais.VerificaEvento] [AbstractBatcher]  - Exception executing batch: 
java.lang.NullPointerException
	at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:2545)
	at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:8673)
	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)

Alguem já passou por algo parecido? ou alguem sabe o porque? e outra coisa se reiniciar meu servidor consigo excluir o registro.

4 Respostas

mauricioadl

vc esta dando commit na hora que vc da insert no fornecedor?

S

Sim! olha meu método de insert:

public final boolean save(Object object) {
        boolean toReturn = false;
        Session session = getSession();
        try {
            session.save(object);
            session.getTransaction().commit();
            toReturn = true;
        } catch (HibernateException ex) {
            toReturn = false;
            log.error("Erro ao salvar os dados na tabela " + object.toString() + ". Erro: " + ex);
            session.getTransaction().rollback();
            toReturn = false;
        } finally {
            session.close();
        }
        return toReturn;
    }

e o meu método de exclusão:

public final boolean delete(Object bean) {
        boolean toReturn = false;
        Session session = getSession();
        try {
            log.info("Deletando: " + bean);
            log.info("Estatisticas do Hibernate: " + getEstatisticasHibernate());
            session.delete(bean);
            session.getTransaction().commit();
            toReturn = true;
        } catch (Exception ex) {
            log.info("Bean: " + bean); 
            log.error("Erro ao excluir os dados na tabela " + bean.toString() + ". Erro: " + ex.getCause());
            session.getTransaction().rollback();
            toReturn = false;
        } finally {
            session.close();
        }
        return toReturn;
    }
S

Alguem?

S

Ninguem?

Criado 28 de novembro de 2011
Ultima resposta 28 de nov. de 2011
Respostas 4
Participantes 2