我有 OneToMany
双向关系实体类(WorkOrder
和 Task
)。 WorkOrder
有一个或多个Task
。
当我通过query 删除WorkOrder
实体时,出现外键约束异常。 EntityManager
无法自动删除相关的Task
。
我的问题:em.removed(..)
方法是否使用了CascadeType.REMOVE
?是不是被query
使用了?(delete 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
。这是对的吗?
我认为,CascadeType
可以被 Query
使用会更好。
最佳答案
根据规范,DELETE by query(查询从“DELETE FROM ...”开始)不会触发此类回调(因为它是一种从数据存储中快速删除数据的方法);回调仅由正常的持久性操作(持久化、合并、刷新、删除)使用,因此如果您希望遵循它们的行为,请使用 remove()
关于java - JPA CascadeType.ALL 不能通过查询工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13681567/