2
respostas

Como impedir a remoção de um Autor em uso

Conforme proposto no desafio da aula 9 para fazer o crud do Autor, eu queria colocar uma mensagem de erro que impeça a pessoa de remover um autor com um livro cadastrado. Na classe AutorBean tentei criar um método do tipo:

    private LivroBean livroBean = new LivroBean();


    public void remover(Autor autor) {
        if(livroBean.getAutores().contains(autor) == true) {
            FacesContext.getCurrentInstance().addMessage("autor",
                    new FacesMessage("Nao pode remover autor que contem um livro!"));
        }
        else {
        System.out.println("Removendo autor: "+autor);    
        System.out.println("autores: "+getAutores());
        new DAO<Autor>(Autor.class).remove(autor);
        }

e na classe Autor:

    @Override
    public String toString() {
        return this.nome;
    }

    @Override
    public boolean equals(Object ref) {

        Autor outro = (Autor) ref;

        if (this.nome != outro.nome ) {
            System.out.println("this nome "+this.nome);
            System.out.println("outro nome "+outro.nome);

            return false;
        }


        return true;
    }

Só que no método remove ele sempre cai no else, ai tenta remover um autor em uso e claro vai dar erro pois não pode remover o autor com uma tabela associada a ele. e no output no console:

this nome Jorge Amado
outro nome Machado de Assis
this nome Jorge Amado
outro nome Jorge Amado
this nome Jorge Amado
outro nome Paulo Coelho
Removendo autor: Jorge Amado
Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_
autores: [Machado de Assis, Jorge Amado, Paulo Coelho]
Hibernate: select autor0_.id as id0_0_, autor0_.nome as nome0_0_ from Autor autor0_ where autor0_.id=?
Hibernate: delete from Autor where id=?

Como faço para ele verificar a existência de um autor com um livro e impedir que a pessoa tente remove-lo?

2 respostas

O autor tem o método equals sobreescrito? Se não tiver, o contains não vai funcionar corretamente.

Sim, está sobreescrito como citei acima, mas será que estou fazendo correto?