If you are using hibernate as your JPA provider you can use the annotation @OnDelete
. This annotation will add to the relation the trigger ON DELETE CASCADE
, which delegates the deletion of the children to the database.
Example:
public class Parent {
@Id
private long id;
}
public class Child {
@Id
private long id;
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
private Parent parent;
}
With this solution a unidirectional relationship from the child to the parent is enough to automatically remove all children. This solution does not need any listeners etc. Also a JPQL query like DELETE FROM Parent WHERE id = 1
will remove the children.