7.10.2020 |

JPA Reference with "orphanRemoval"

Orphan Removal

JPA 2 supports an additional and more aggressive remove cascading mode which can be specified using the orphanRemoval element of the @onetoone and @onetomany annotations:

JPA will keep track of the referencing Objects which need to be removed, when its managed via an PersistentBag:

   @OneToMany(..., orphanRemoval = true)
   private List<Address> addresses = new ArrayList<>();
      
   ...

   employee = employeeRepository.findById(id);
   employee.getAddresses().clear() 

employee.getAdresses() is a hibernate.PersistenceBag therefore hibernate will track the changes within the collection and propagate those to the underlying database (like delete the addresses which have been referenced by the employee when orphanRemoval = true)

If we overwrite the Collection, hibernate is unable to tell what has changed and will fail e.g.

   employee = employeeRepository.findById(id);
   employee.setAddresses(findAddresses(employee))

The Error will be something like this when there were Addresses within the Collection

"A collection with cascade=\"all-delete-orphan\" was no longer referenced by the owning entity instance: xxx nested exception is org.hibernate.HibernateException: A collection with cascade=\"all-delete-orphan\" was no longer referenced by the owning entity instance: xxx"
Zur Übersicht
Simon Jakubowski

Mehr vom Devsquad...

Sven Röttering

Email rules for shared mail box

Umut Tufanoglu

Vue3 / NuxtJS

Hallo, ich bin Jörg Herbst!

Ich bin der CEO von newcubator und freue mich über jede Nachricht!

* Pflichtfeld