我有OneToMany
个双向关系实体类(WorkOrder
和Task
)。 WorkOrder
有一个或多个Task
。
当我通过查询删除WorkOrder
enity时,我得到外键约束异常。 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
更好。
答案 0 :(得分:8)
根据规范,DELETE by query(查询开始“DELETE FROM ...”)不会触发此类回调(因为它是一种快速从数据存储中删除数据的方式);回调仅由正常的持久性操作(持久化,合并,刷新,删除)使用,因此如果您希望遵循其行为,则使用 remove()