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