JPA持久性:从列表中自动删除不存在的已引用实体

时间:2014-11-09 10:40:47

标签: java entity-framework jpa persistence

我想删除一个实体,该实体将被另一个实体引用。 在这里我的测试:

@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。

1 个答案:

答案 0 :(得分:0)

我的解决方法是使用ManyToMany关系。 所以,我迭代了SchoolSubject中的老师,并为每个老师删除这个主题。 在此步骤之后,我从SchoolSubject中的列表中删除此教师。