Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Relacionamentos ManyToOne

Em um relacionamento OneToMany/MenyToOne bidirecional, minha aplicação deveria ter acesso a ambos os lados da relação, porém em uma modelo em em que tenho um Autor que possui vários Livros. Quando removo um Livro relacionado a um Autor, ok. Porém não consigo deletar um autor que está relacionado a Livro(s).

AUTOR

package br.com.livraria.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Autor implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    private String nome;

    @OneToMany(mappedBy="autor", cascade=CascadeType.ALL)
    private List<Livro> livros = new ArrayList<>();

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public List<Livro> getLivros() {
        return livros;
    }

    public void setLivros(List<Livro> livros) {
        this.livros = livros;
    }

}

LIVRO

package br.com.livraria.model;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;


@Entity
public class Livro implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    private String titulo; 

    @ManyToOne
    @JoinColumn(name="autor_id")
    private Autor autor;


    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitulo() {
        return titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public Autor getAutor() {
        return autor;
    }
    public void setAutor(Autor autor) {
        this.autor = autor;
    }


}

MÉTODO

@Transactional
    public void removeAutor(Integer autorId){

        Autor autor = autorDAO.buscarPorId(autorId);
        autorDAO.remove(autor);
    }

Minha dúvida é em relação de como devo proceder, se o problema é no método ou em alguma entidade.

1 resposta
solução!

RESOLVIDO!

Desvinculei Autor de Livro, atualizando a lista de Livros do Autor:

@Transactional
    public void removeAutor(Integer autorId){

        Autor autor = autorDAO.buscarPorId(autorId);

        List<Livro> livros = autor.getLivros();

        for (Livro livro : livros) {
            System.out.println(livro.getTitulo() + " LISTA DE LIVROS ADICIONADOS");
            livro.setAutor(null);
                    }

        autorDAO.remove(autor);
    }