我喜欢删除一个实体,该实体将被另一个实体引用。
这是我的测试:
@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。
最佳答案
我的解决方法是使用ManyToMany关系。
因此,我遍历SchoolSubject中的老师,并为每位老师删除该主题。
完成此步骤后,我将该老师从SchoolSubject的列表中删除。