HHH-9171 : Orphan removal does not happen for new entity element

This commit is contained in:
Gail Badner 2014-05-27 12:19:04 -07:00
parent 1fc74feada
commit f549b88831
1 changed files with 8 additions and 2 deletions

View File

@ -31,6 +31,7 @@ import org.hibernate.Session;
import org.hibernate.Transaction; import org.hibernate.Transaction;
import org.hibernate.internal.util.SerializationHelper; import org.hibernate.internal.util.SerializationHelper;
import org.hibernate.testing.FailureExpected; import org.hibernate.testing.FailureExpected;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
@ -362,7 +363,7 @@ public class OrphanTest extends BaseCoreFunctionalTestCase {
@Test @Test
@SuppressWarnings( {"unchecked"}) @SuppressWarnings( {"unchecked"})
@FailureExpected(jiraKey = "HHH-9171") @TestForIssue(jiraKey = "HHH-9171")
public void testOrphanDeleteOnAddElementMergeRemoveElementMerge() { public void testOrphanDeleteOnAddElementMergeRemoveElementMerge() {
Session session = openSession(); Session session = openSession();
Transaction t = session.beginTransaction(); Transaction t = session.beginTransaction();
@ -380,6 +381,11 @@ public class OrphanTest extends BaseCoreFunctionalTestCase {
session = openSession(); session = openSession();
t = session.beginTransaction(); t = session.beginTransaction();
session.merge(prod); session.merge(prod);
// In Section 2.9, Entity Relationships, the JPA 2.1 spec says:
// "If the entity being orphaned is a detached, new, or removed entity,
// the semantics of orphanRemoval do not apply."
// In other words, since part is a new entity, it will not be deleted when removed
// from prod.parts, even though cascade for the association includes "delete-orphan".
prod.getParts().remove(part); prod.getParts().remove(part);
session.merge( prod ); session.merge( prod );
t.commit(); t.commit();
@ -387,7 +393,7 @@ public class OrphanTest extends BaseCoreFunctionalTestCase {
session = openSession(); session = openSession();
t = session.beginTransaction(); t = session.beginTransaction();
assertNull( session.get( Part.class, "Widge" ) ); assertNotNull( session.get( Part.class, "Widge" ) );
session.delete( session.get(Product.class, "Widget") ); session.delete( session.get(Product.class, "Widget") );
t.commit(); t.commit();
session.close(); session.close();