cascade=ALL + orphanRemoval=true, in-place removeIf(): books before=3, books after=1 orphanRemoval=false: after removing book2 from author.books and flushing, book2 row still exists = true, author_id still = 1 owning side test: mutated only author2.getBooks().add(book) (inverse side), book.author after flush = null (FK not written) cascade=ALL + orphanRemoval=true, reassigning the collection reference -- wrapper: jakarta.persistence.RollbackException cascade=ALL + orphanRemoval=true, reassigning the collection reference -- root cause: org.hibernate.HibernateException: A collection with orphan deletion was no longer referenced by the owning entity instance: com.ankurm.hibernatedemo.association.CascadeAuthor.books /* DELETE FROM CascadeBook */ delete from cascade_book cb1_0 Hibernate: /* DELETE FROM CascadeBook */ delete from cascade_book cb1_0 /* delete for com.ankurm.hibernatedemo.association.CascadeBook */delete from cascade_book where id=? Hibernate: /* delete for com.ankurm.hibernatedemo.association.CascadeBook */delete from cascade_book where id=? /* delete for com.ankurm.hibernatedemo.association.CascadeBook */delete from cascade_book where id=? Hibernate: /* delete for com.ankurm.hibernatedemo.association.CascadeBook */delete from cascade_book where id=? /* DELETE FROM CascadeBook */ delete from cascade_book cb1_0 Hibernate: /* DELETE FROM CascadeBook */ delete from cascade_book cb1_0 /* DELETE FROM CascadeBook */ delete from cascade_book cb1_0 Hibernate: /* DELETE FROM CascadeBook */ delete from cascade_book cb1_0 /* DELETE FROM CascadeBook */ delete from cascade_book cb1_0 Hibernate: /* DELETE FROM CascadeBook */ delete from cascade_book cb1_0