我正在寻找如何删除关系OneToMany / ManyToOne的注册表。 问题是,当我执行EntityManager.remove()时,所有记录都被删除,我希望只删除子(DiasTurma),而不是你的父(Turma)。
这里我正在尝试
// parent
@Entity
public class Turma implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer id;
@NotNull @Column(unique = true)
private String turmaNome;
@OneToMany(mappedBy = "turma", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<DiasTurma> diasTurma = new ArrayList<DiasTurma>();
//gets/sets
//child
@Entity
public class DiasTurma implements Serializable {
private static final long serialVersionUID = 1L;
@Id @GeneratedValue
private Integer id;
private String horaInicio;
private String horaFim;
private String diaSemana;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "id_turma")
private Turma turma;
//gets/sets
// DAO
/** remove DiasTurma of Turma */
public void removeDiasTurma(){
DiasTurma dias = (DiasTurma)em.find(DiasTurma.class, 3);
em.getTransaction().begin();
em.remove(dias);
em.getTransaction().commit();
em.close();
}
方法removeDiasTurma()
执行删除操作,但删除包括Turma记录在内的所有记录。
如何仅删除记录3?
答案 0 :(得分:1)
发生这种情况是因为你明确要求删除级联:问题是,当我执行EntityManager.remove()时,所有记录都被删除,我希望只删除子(DiasTurma),而不是你的父(Turma)
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
由于您指定了cascade = ALL
,因此在DiasTurma上完成的每个操作(包括remove()
)都会级联到其父Turma。