java - JPA CascadeType.ALL 不能通过查询工作?

标签 java jpa

我有 OneToMany 双向关系实体类(WorkOrderTask)。 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/

相关文章:

java - 使用 jpaTemplate 进行联接查询非常慢

java - 程序抛出堆栈溢出错误

java - 从数据库中检索单个 ROW

java - 使用 JPA 检索 Box 内的所有项目

mysql - 嵌套对象插入需要时间 -Spring Data JPA、Hibernate 和 MySQL

java - Realm 异常 : java. lang.UnsupportedOperationException:缺少 Not 参数

java - 尝试使用 SQL 插入时出现 NullPointerException

JPA 和 Play Framework : No Persistence provider for EntityManager named update

java - 是否可以并行初始化多个惰性集合?

java - 使用 JPA 和 Hibernate 的 ORM : EntityManager is null