我想删除一个实体,该实体将被另一个实体引用。 在这里我的测试:
@Entity
@DiscriminatorValue("Teacher")
public class Teacher extends Employee{
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Teacher(){
}
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
private List<SchoolSubject> schoolSubjects;
}
@javax.persistence.Entity
@DiscriminatorValue("SchoolSubject")
public class SchoolSubject implements Resource{
@Id
private String name; // Name of the schoolsubject has to be unique
@Override
public Long getID() {
return id;
}
public SchoolSubject(){}
public SchoolSubject(String name)
{
this.name = name;
}
}
所以我试图删除所有的SchoolSubjects:
q = em.createQuery("select ss from SchoolSubject ss");
List<SchoolSubject> subjects = q.getResultList();
for(SchoolSubject subject:subjects)
{
em.getTransaction().begin();
em.remove(subject);
em.getTransaction().commit();
}
所以我知道这个动作不起作用,因为老师引用了SchoolSubjects。 - 我喜欢“删除”SchoolSubject以及教师名单中的SchoolSubject。
例如: 1.删除SchoolSubject 2.教师搜索此“SchoolSubject”,如果找不到,则从列表中自动删除SchoolSubject。
答案 0 :(得分:0)
我的解决方法是使用ManyToMany关系。 所以,我迭代了SchoolSubject中的老师,并为每个老师删除这个主题。 在此步骤之后,我从SchoolSubject中的列表中删除此教师。