2
respostas

Estou com problemas com o try catch

Estou com uma certá dificuldade em usar o try catch, o problema é que sei como usar e sei para que serve! Todos os outros meus try catch tão protegendo os código, mais em exemplo tenho um botão de excluir um produto exemplo, e esse produto já tá sendo acossiada a outra tabela, então o hibernate não deixa ele excluir esse produto. Oque é mais que certo, então eu quero mostrar uma msg para o usuario falando que não pode ser feita a exclusão, já tentei de várias formas varias excpetions, mais não cai o bloco catch!

Segue o código.

@Transacional
    public void excluir() {
        try {
            this.categoriaProdutoDao.excluir(categoriaProduto);
            Mensagem.mensagemInfo("Categoria excluida com sucesso");
        } catch (RollbackException | ConstraintViolationException  e) {
            Mensagem.mensagemError("ERRO TESSSSTE");
        }
    }

Segue o erro no stack trace.

     ADVERTÊNCIA: javax.persistence.RollbackException: Error while committing the transaction
javax.el.ELException: javax.persistence.RollbackException: Error while committing the transaction

Caused by: javax.persistence.RollbackException: Error while committing the transaction
    at org.hibernate.internal.ExceptionConverterImpl.convertCommitException(ExceptionConverterImpl.java:75)
    at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:71)
    at br.com.bercalini.gerenciamento.Gerenciador.controleTransacao(Gerenciador.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Caused by: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155)
    at org.hibernate.internal.ExceptionConverterImpl.convertCommitException(ExceptionConverterImpl.java:56)
    ... 52 more
Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:59)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`bercalini`.`produto`, CONSTRAINT `FKrxpw9uioejee8jhr8iva13m5g` FOREIGN KEY (`categoriaProduto_codigo`) REFERENCES `categoriaproduto` (`codigo`))
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1040)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:205)
    ... 68 more

ago 30, 2017 12:52:04 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: javax.persistence.RollbackException: Error while committing the transaction
    at org.hibernate.internal.ExceptionConverterImpl.convertCommitException(ExceptionConverterImpl.java:75)

Porque motivo não tá caindo no catch? Oque fazer para arrumar?

2 respostas

Olhei bem por cima, mas entendo que vc quer destruir um item que tem outros itens dependentes dele, limpa os relacionamentos antes. Tentando ajudar mas estou na correria aqui... vlw

Nãaao não quero destruir os itens e os relacionamentos deles, apenas quero que caia o bloco catch para lançar minha mensagem!

Porque quando clico no botão excluir lança essas excptions na tela, e o usuario não sabe oque ocorreu por de baixo da stack trace, então quero lançar essa mensagem, só que o try catch não está fazendo isso :( vlw