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.