The method "merge" from the EntityManager causes a duplicated "insert" of a child entity.


The method "merge" from the EntityManager causes a duplicated "insert" of a child entity.
Related to HHH-3332

Observed Behavior:

When you have an Entity A with a OneToMany(fetch=LAZY, cascade=ALL or (MERGE and PERSIST)) relationship to another Entity B and attempt to add an new B instance to A hibernate will generate a duplicate insert command upon commit.

I have witnessed this problem occurring when this procedure is followed:

  1. retrieve an instance of A from persistence (A a = em.find(A.class, id))

  2. add a new B to A (a.getBs.add(new B()))

  3. merge instance 'a' back into persistence (em.merge(a))

Upon transaction commit hibernate will generate an additional "insert" statement and insert the new instance of b into the data source twice.

Expected behavior:

I would expect hibernate to only perform a single insertion when 'a' is merged back to persistence and the B's are created through the cascade.

Notes (Discoveries):

This problem can be worked around by:

  • Changing the OneToMany relationship from a List to a Set

  • Only using either Cascade MERGE or PERSIST not both of ALL

  • Add a new B to A.getBs by adding to the '0' index (a.getBs.add(0,new B()))


Hibernate-Core 3.6.0, Hibernate EntityManager 3.6.0, Derby, Spring 3.0.5 (Configuration), JUnit 4.5


Steve Ebersole
January 14, 2016, 2:48 AM

Gail asked that we hold off applying this for 5.0.7 as we need to discuss. She is on holidays, so we will discuss when she gets back.

Vlad Mihalcea
January 25, 2016, 9:20 PM

This PR fixes the issue. I'm looking forward to integrating this if Gail thinks there's nothing to be added to this commit.

Gail Badner
February 10, 2016, 7:32 PM

Fixed in master and 5.0 branches.

Vlad Mihalcea
February 10, 2016, 8:06 PM

Thanks Gail for taking care of this issue.

Mihai Postelnicu
February 10, 2016, 9:36 PM

Great news !
Thanks a lot for addressing this !



Gail Badner


Seth Martin

Fix versions




Suitable for new contributors


Requires Release Note


Pull Request




Affects versions