Zaw Than oo
Zaw Than oo

Reputation: 9935

JPA CascadeType.ALL does not work by query?

I have OneToMany bidirectional relationship enity classes (WorkOrder and Task). WorkOrder have one or more Task. when I delete a WorkOrder enity by query, I get foreign key constraint exception. EntityManager can't delete related Task automatically.

My question : Does Is CascadeType.REMOVE used by em.removed(..) method? Is it not used by query?(delete 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;
    .....
}

I need to delete WorkOrder based on expiry date. I need to delete related Task firstly, after that I have to delete WorkOrder. Is it correct? I think, it will be better CascadeType could used by Query.

Upvotes: 1

Views: 1611

Answers (1)

DataNucleus
DataNucleus

Reputation: 15577

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); 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()

Upvotes: 9

Related Questions