简体   繁体   English

JPA CascadeType.ALL无法通过查询运行?

[英]JPA CascadeType.ALL does not work by query?

I have OneToMany bidirectional relationship enity classes ( WorkOrder and Task ). 我有OneToMany双向关系实体类( WorkOrderTask )。 WorkOrder have one or more Task . WorkOrder具有一个或多个Task when I delete a WorkOrder enity by query , I get foreign key constraint exception. 当我通过查询删除WorkOrder实体时,我得到了外键约束异常。 EntityManager can't delete related Task automatically. EntityManager无法自动删除相关的Task

My question : Does Is CascadeType.REMOVE used by em.removed(..) method? 我的问题: em.removed(..)方法是否使用CascadeType.REMOVE Is it not used by query ?(delete query). query不使用它吗?(删除查询)。

WorkOrder.java 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 Task.java

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

I need to delete WorkOrder based on expiry date. 我需要根据有效期删除WorkOrder I need to delete related Task firstly, after that I have to delete WorkOrder . 我需要先删除相关的Task ,然后再删除WorkOrder Is it correct? 这是正确的吗? I think, it will be better CascadeType could used by Query . 我认为Query可以使用CascadeType更好。

As per the spec, DELETE by query (query starting "DELETE FROM ...") does not trigger such callbacks (since it is a way of removing data from the datastore quickly); 根据规范,通过查询进行的DELETE(以“ DELETE FROM ...”开头的查询)不会触发此类回调(因为这是一种快速从数据存储中删除数据的方式); callbacks are only used by the normal persistence operations (persist, merge, refresh, remove) so if you want their behaviour to be followed then use remove() 回调仅由正常的持久性操作(持久,合并,刷新,删除)使用,因此,如果要遵循其行为,请使用remove()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM