Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro de RollbackException

Estava implementado o CRUD para os autores do livro, porem o "remove" não esta funcionando conforme esperado.

Meu console quando clico em remover no autor:

FASE: RESTORE_VIEW 1
FASE: APPLY_REQUEST_VALUES 2
FASE: PROCESS_VALIDATIONS 3
FASE: UPDATE_MODEL_VALUES 4
FASE: INVOKE_APPLICATION 5
Removendo Autor
jun 20, 2017 11:04:41 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1451, SQLState: 23000
jun 20, 2017 11:04:41 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Cannot delete or update a parent row: a foreign key constraint fails (`livrariadb`.`livro_autor`, CONSTRAINT `FK9590997AD70C7E4A` FOREIGN KEY (`autores_id`) REFERENCES `autor` (`id`))
ERRO CAPTURADO: javax.persistence.RollbackException: Error while committing the transaction
FASE: RENDER_RESPONSE 6

Meu codigo no autor.xhtml:

<h:form id="formTabelaAutores">
            <fieldset>
                <legend>Autores Cadastrados</legend>
                <h:dataTable id="tabelaLivros" value="#{autorBean.autores}"
                    var="autor">

                    <h:column>
                        <f:facet name="header">Nome Autor</f:facet>
                        <h:outputText value="#{autor.nome}" />
                    </h:column>


                    <h:column>
                        <f:facet name="header">Alterar</f:facet>
                        <h:commandLink value="alterar"
                            action="#{autorBean.carregar(autor)}" />
                    </h:column>

                    <h:column>
                        <f:facet name="header">Remover</f:facet>
                        <h:commandLink value="Remover"
                            action="#{autorBean.remover(autor)}" />
                    </h:column>

                </h:dataTable>
            </fieldset>
        </h:form>

Meu codigo do autorBean.java:

public void remover(Autor autor){
        try{
        System.out.println("Removendo Autor");
        new DAO<Autor>(Autor.class).remove(autor);
        } catch (RollbackException re) {
            System.out.println("ERRO CAPTURADO: " + re );
        }
    }

Coloquei o "try catch" para capturar o erro mais especifico pois anteriormente, sem esta opção, o erro era muito grande.

Alguém já passou por esse erro ? Alguma dica ?

OBS: lembrando que a opção de remover esta funcionando normalmente com livro.

2 respostas
solução!

Fala Cesar, tudo bem?

Esse erro ocorre porque o Autor está vinculado à algum livro e por isso ele não vai deixar deletar esse autor até você apagar os livros desse autor.

Essa é a linha do erro:

ERROR: Cannot delete or update a parent row: a foreign key constraint fails (`livrariadb`.`livro_autor`, CONSTRAINT `FK9590997AD70C7E4A` FOREIGN KEY (`autores_id`) REFERENCES `autor` (`id`))

Cadastre um novo autor e veja se a funcionalidade de exclusão funciona com esse novo autor(Isso significa que sua lógica funciona).

Caso esteja funcionando fique tranquilo, existem formas de corrigir esse problema que, se não me engano, serão abordadas um pouco mais pra frente nesse curso ou no módulo 2.

Esper ter ajudado =)

Exatamente isso, quando meu Autor esta vinculado com algum livro, o erro acima ocorre, porem quando não há nenhum livro vinculado com este Autor, a remoção funciona normalmente.

Obrigado Samir !

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software