我有OneToMany双向关系实体类(WorkOrderTask)。 WorkOrder具有一个或多个Task
当我通过查询删除WorkOrder实体时,出现外键约束异常。 EntityManager无法自动删除相关的Task

我的问题:CascadeType.REMOVE方法是否使用em.removed(..)query不使用它吗?(删除查询)。

WorkOrder.java

.....
public class WorkOrder {
    ....
    @Temporal(TemporalType.TIMESTAMP)
    private Date expiryDate;

    @OneToMany(cascade=CascadeType.ALL, mappedBy="workOrder", orphanRemoval=true)
    private List<Task> taskList;
    ......
}


Task.java

......
public class Task {
    .....
    @ManyToOne
    @JoinColumn(name = "WORK_ORDER_ID", referencedColumnName = "ID")
    private WorkOrder workOrder;
    .....
}


我需要根据有效期限删除WorkOrder。我需要先删除相关的Task,然后再删除WorkOrder。这是对的吗?
我认为,CascadeType可以更好地使用Query

最佳答案

根据规范,通过查询进行的DELETE(以“ DELETE FROM ...”开头的查询)不会触发此类回调(因为这是一种快速从数据存储中删除数据的方式);回调仅由正常的持久性操作(持久,合并,刷新,删除)使用,因此,如果要遵循其行为,请使用remove()

09-04 22:34
查看更多