1

我有OneToMany双向关系实体类(WorkOrderTask)。WorkOrder有一个或多个TaskWorkOrder当我通过查询删除一个实体时,我得到外键约束异常。EntityManager不能Task自动删除相关。

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

工作订单.java

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

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

任务.java

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

我需要WorkOrder根据到期日期删除。我需要先删除相关Task,然后我必须删除WorkOrder. 这是正确的吗?我认为,它会更好地CascadeTypeQuery.

4

1 回答 1

8

根据规范,DELETE by query(查询开始“DELETE FROM ...”)不会触发此类回调(因为它是一种快速从数据存储中删除数据的方法);回调仅用于正常的持久性操作(持久化、合并、刷新、删除),因此如果您希望遵循它们的行为,请使用remove()

于 2012-12-03T10:46:29.937 回答