Reputation: 9935
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
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