我喜欢删除一个实体,该实体将被另一个实体引用。
这是我的测试:

@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的列表中删除。

09-13 07:03