I am a little confused about the JPA 2.0 orphanRemoval
attribute.
I think I can see it is needed when I use my JPA provider's DB generation tools to create the underlying database DDL to have an ON DELETE CASCADE
on the particular relation.
However, if the DB exists and it already has an ON DELETE CASCADE
on the relation, is this not enough to cascade the deletion appropriately? What does the orphanRemoval
do in addition?
orphanRemoval
has nothing to do with ON DELETE CASCADE
.
orphanRemoval
is an entirely ORM-specific thing. It marks "child" entity to be removed when it's no longer referenced from the "parent" entity, e.g. when you remove the child entity from the corresponding collection of the parent entity.
ON DELETE CASCADE
is a database-specific thing, it deletes the "child" row in the database when the "parent" row is deleted.