From f36e0ef49ea74a298d2124eda190fb2e04d5cf51 Mon Sep 17 00:00:00 2001 From: Gail Badner Date: Tue, 16 Jun 2015 18:08:44 -0700 Subject: [PATCH] Revert "HHH-9777 : Copy tests from AbstractDereferencedCollectionTest into subclasses" This reverts commit 3a4b2426fc9a6c61b5382d4cb34678d76b54a223. --- .../AbstractDereferencedCollectionTest.java | 307 +++++++++++++++++- .../test/collection/dereferenced/One.java | 35 ++ ...onedCascadeDereferencedCollectionTest.java | 304 +---------------- .../dereferenced/UnversionedCascadeOne.java | 2 +- ...edNoCascadeDereferencedCollectionTest.java | 301 +---------------- .../dereferenced/UnversionedNoCascadeOne.java | 2 +- ...onedCascadeDereferencedCollectionTest.java | 303 +---------------- .../dereferenced/VersionedCascadeOne.java | 2 +- ...edNoCascadeDereferencedCollectionTest.java | 303 +---------------- .../dereferenced/VersionedNoCascadeOne.java | 2 +- 10 files changed, 353 insertions(+), 1208 deletions(-) create mode 100644 hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/One.java diff --git a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/AbstractDereferencedCollectionTest.java b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/AbstractDereferencedCollectionTest.java index 55b77c2793..35125edca1 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/AbstractDereferencedCollectionTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/AbstractDereferencedCollectionTest.java @@ -48,11 +48,314 @@ import static org.junit.Assert.assertTrue; */ public abstract class AbstractDereferencedCollectionTest extends BaseCoreFunctionalTestCase { - protected EntityEntry getEntityEntry(Session s, Object entity) { + @Test + @TestForIssue( jiraKey = "HHH-9777" ) + public void testMergeNullCollection() { + Session s = openSession(); + s.getTransaction().begin(); + One one = createOwner(); + assertNull( one.getManies() ); + s.save( one ); + assertNull( one.getManies() ); + EntityEntry eeOne = getEntityEntry( s, one ); + assertNull( eeOne.getLoadedValue( "manies" ) ); + s.flush(); + assertNull( one.getManies() ); + assertNull( eeOne.getLoadedValue( "manies" ) ); + s.getTransaction().commit(); + s.close(); + + final String role = getCollectionOwnerClass().getName() + ".manies"; + + s = openSession(); + s.getTransaction().begin(); + one = (One) s.merge( one ); + + // after merging, one.getManies() should still be null; + // the EntityEntry loaded state should contain a PersistentCollection though. + + assertNull( one.getManies() ); + eeOne = getEntityEntry( s, one ); + AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); + assertNotNull( maniesEEOneStateOrig ); + + // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) + assertEquals( role, maniesEEOneStateOrig.getRole() ); + assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); + assertSame( s, maniesEEOneStateOrig.getSession() ); + + // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. + CollectionEntry ceManiesOrig = getCollectionEntry( s, maniesEEOneStateOrig ); + assertNotNull( ceManiesOrig ); + assertEquals( role, ceManiesOrig.getRole() ); + assertSame( sessionFactory().getCollectionPersister( role ), ceManiesOrig.getLoadedPersister() ); + assertEquals( one.getId(), ceManiesOrig.getKey() ); + + s.flush(); + + // Ensure the same EntityEntry is being used. + assertSame( eeOne, getEntityEntry( s, one ) ); + + // Ensure one.getManies() is still null. + assertNull( one.getManies() ); + + // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. + assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); + + // Ensure the original CollectionEntry has role, persister, and key set to null. + assertNull( ceManiesOrig.getRole() ); + assertNull( ceManiesOrig.getLoadedPersister() ); + assertNull( ceManiesOrig.getKey() ); + + // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) + // has key and role set to null. + assertNull( maniesEEOneStateOrig.getKey() ); + assertNull( maniesEEOneStateOrig.getRole() ); + + // Ensure eeOne.getLoadedState() returns null for collection after flush. + assertNull( eeOne.getLoadedValue( "manies" ) ); + + // Ensure the session in maniesEEOneStateOrig has been unset. + assertNull( maniesEEOneStateOrig.getSession() ); + + s.getTransaction().commit(); + s.close(); + } + + @Test + @TestForIssue( jiraKey = "HHH-9777" ) + public void testGetAndNullifyCollection() { + Session s = openSession(); + s.getTransaction().begin(); + One one = createOwner(); + assertNull( one.getManies() ); + s.save( one ); + assertNull( one.getManies() ); + EntityEntry eeOne = getEntityEntry( s, one ); + assertNull( eeOne.getLoadedValue( "manies" ) ); + s.flush(); + assertNull( one.getManies() ); + assertNull( eeOne.getLoadedValue( "manies" ) ); + s.getTransaction().commit(); + s.close(); + + final String role = getCollectionOwnerClass().getName() + ".manies"; + + s = openSession(); + s.getTransaction().begin(); + one = (One) s.get( getCollectionOwnerClass(), one.getId() ); + + // When returned by Session.get(), one.getManies() will return a PersistentCollection; + // the EntityEntry loaded state should contain the same PersistentCollection. + + eeOne = getEntityEntry( s, one ); + assertNotNull( one.getManies() ); + AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); + assertSame( one.getManies(), maniesEEOneStateOrig ); + + // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) + assertEquals( role, maniesEEOneStateOrig.getRole() ); + assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); + assertSame( s, maniesEEOneStateOrig.getSession() ); + + // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. + CollectionEntry ceManies = getCollectionEntry( s, maniesEEOneStateOrig ); + assertNotNull( ceManies ); + assertEquals( role, ceManies.getRole() ); + assertSame( sessionFactory().getCollectionPersister( role ), ceManies.getLoadedPersister() ); + assertEquals( one.getId(), ceManies.getKey() ); + + // nullify collection + one.setManies( null ); + + s.flush(); + + // Ensure the same EntityEntry is being used. + assertSame( eeOne, getEntityEntry( s, one ) ); + + // Ensure one.getManies() is still null. + assertNull( one.getManies() ); + + // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. + assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); + + // Ensure the original CollectionEntry has role, persister, and key set to null. + assertNull( ceManies.getRole() ); + assertNull( ceManies.getLoadedPersister() ); + assertNull( ceManies.getKey() ); + + // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) + // has key and role set to null. + assertNull( maniesEEOneStateOrig.getKey() ); + assertNull( maniesEEOneStateOrig.getRole() ); + + // Ensure eeOne.getLoadedState() returns null for collection after flush. + assertNull( eeOne.getLoadedValue( "manies" ) ); + + // Ensure the session in maniesEEOneStateOrig has been unset. + assertNull( maniesEEOneStateOrig.getSession() ); + s.getTransaction().commit(); + s.close(); + } + + @Test + @TestForIssue( jiraKey = "HHH-9777" ) + public void testGetAndReplaceCollection() { + Session s = openSession(); + s.getTransaction().begin(); + One one = createOwner(); + assertNull( one.getManies() ); + s.save( one ); + assertNull( one.getManies() ); + EntityEntry eeOne = getEntityEntry( s, one ); + assertNull( eeOne.getLoadedValue( "manies" ) ); + s.flush(); + assertNull( one.getManies() ); + assertNull( eeOne.getLoadedValue( "manies" ) ); + s.getTransaction().commit(); + s.close(); + + final String role = getCollectionOwnerClass().getName() + ".manies"; + + s = openSession(); + s.getTransaction().begin(); + one = (One) s.get( getCollectionOwnerClass(), one.getId() ); + + // When returned by Session.get(), one.getManies() will return a PersistentCollection; + // the EntityEntry loaded state should contain the same PersistentCollection. + + eeOne = getEntityEntry( s, one ); + assertNotNull( one.getManies() ); + AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); + assertSame( one.getManies(), maniesEEOneStateOrig ); + + // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) + assertEquals( role, maniesEEOneStateOrig.getRole() ); + assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); + assertSame( s, maniesEEOneStateOrig.getSession() ); + + // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. + CollectionEntry ceManiesOrig = getCollectionEntry( s, maniesEEOneStateOrig ); + assertNotNull( ceManiesOrig ); + assertEquals( role, ceManiesOrig.getRole() ); + assertSame( sessionFactory().getCollectionPersister( role ), ceManiesOrig.getLoadedPersister() ); + assertEquals( one.getId(), ceManiesOrig.getKey() ); + + // replace collection + one.setManies( new HashSet() ); + + s.flush(); + + // Ensure the same EntityEntry is being used. + assertSame( eeOne, getEntityEntry( s, one ) ); + + // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. + assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); + + // Ensure the original CollectionEntry has role, persister, and key set to null. + assertNull( ceManiesOrig.getRole() ); + assertNull( ceManiesOrig.getLoadedPersister() ); + assertNull( ceManiesOrig.getKey() ); + + // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) + // has key and role set to null. + assertNull( maniesEEOneStateOrig.getKey() ); + assertNull( maniesEEOneStateOrig.getRole() ); + + // one.getManies() should be "wrapped" by a PersistentCollection now; role, key, and session should be set properly. + assertTrue( PersistentCollection.class.isInstance( one.getManies() ) ); + assertEquals( role, ( (PersistentCollection) one.getManies() ).getRole() ); + assertEquals( one.getId(), ( (PersistentCollection) one.getManies() ).getKey() ); + assertSame( s, ( (AbstractPersistentCollection) one.getManies() ).getSession() ); + + // Ensure eeOne.getLoadedState() contains the new collection. + assertSame( one.getManies(), eeOne.getLoadedValue( "manies" ) ); + + // Ensure there is a new CollectionEntry for the new collection and that role, persister, and key are set properly. + CollectionEntry ceManiesAfterReplace = getCollectionEntry( s, (PersistentCollection) one.getManies() ); + assertNotNull( ceManiesAfterReplace ); + assertEquals( role, ceManiesAfterReplace.getRole() ); + assertSame( sessionFactory().getCollectionPersister( role ), ceManiesAfterReplace.getLoadedPersister() ); + assertEquals( one.getId(), ceManiesAfterReplace.getKey() ); + + // Ensure the session in maniesEEOneStateOrig has been unset. + assertNull( maniesEEOneStateOrig.getSession() ); + + s.getTransaction().commit(); + s.close(); + } + + @Test + public void testSaveOrUpdateNullCollection() { + Session s = openSession(); + s.getTransaction().begin(); + One one = createOwner(); + assertNull( one.getManies() ); + s.save( one ); + assertNull( one.getManies() ); + EntityEntry eeOne = getEntityEntry( s, one ); + assertNull( eeOne.getLoadedValue( "manies" ) ); + s.flush(); + assertNull( one.getManies() ); + assertNull( eeOne.getLoadedValue( "manies" ) ); + s.getTransaction().commit(); + s.close(); + + final String role = getCollectionOwnerClass().getName() + ".manies"; + + s = openSession(); + s.getTransaction().begin(); + s.saveOrUpdate( one ); + + // Ensure one.getManies() is still null. + assertNull( one.getManies() ); + + // Ensure the EntityEntry loaded state contains null for the manies collection. + eeOne = getEntityEntry( s, one ); + assertNull( eeOne.getLoadedValue( "manies" ) ); + + s.flush(); + + // Ensure one.getManies() is still null. + assertNull( one.getManies() ); + + // Ensure the same EntityEntry is being used. + assertSame( eeOne, getEntityEntry( s, one ) ); + + // Ensure the EntityEntry loaded state still contains null for the manies collection. + assertNull( eeOne.getLoadedValue( "manies" ) ); + + s.getTransaction().commit(); + s.close(); + } + + protected abstract Class getCollectionOwnerClass(); + + protected final One createOwner() { + try { + return (One) getCollectionOwnerClass().newInstance(); + } + catch (InstantiationException ex) { + throw new RuntimeException( ex ); + } + catch (IllegalAccessException ex) { + throw new RuntimeException( ex ); + } + } + + private EntityEntry getEntityEntry(Session s, Object entity) { return ( (SessionImplementor) s ).getPersistenceContext().getEntry( entity ); } - protected CollectionEntry getCollectionEntry(Session s, PersistentCollection collection) { + private CollectionEntry getCollectionEntry(Session s, PersistentCollection collection) { return ( (SessionImplementor) s ).getPersistenceContext().getCollectionEntry( collection ); } + + @Override + protected Class[] getAnnotatedClasses() { + return new Class[] { + getCollectionOwnerClass(), + Many.class + }; + } } diff --git a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/One.java b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/One.java new file mode 100644 index 0000000000..b35425853c --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/One.java @@ -0,0 +1,35 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2015, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package org.hibernate.test.collection.dereferenced; + +import java.util.Set; + +/** + * @author Gail Badner + */ +public interface One { + long getId(); + Set getManies(); + void setManies(Set manies); +} diff --git a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedCascadeDereferencedCollectionTest.java b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedCascadeDereferencedCollectionTest.java index 42a6b604c2..3b9392a564 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedCascadeDereferencedCollectionTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedCascadeDereferencedCollectionTest.java @@ -23,313 +23,13 @@ */ package org.hibernate.test.collection.dereferenced; -import java.util.HashSet; - -import org.junit.Test; - -import org.hibernate.Session; -import org.hibernate.collection.internal.AbstractPersistentCollection; -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.testing.TestForIssue; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; - /** * @author Gail Badner */ public class UnversionedCascadeDereferencedCollectionTest extends AbstractDereferencedCollectionTest { - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testMergeNullCollection() { - Session s = openSession(); - s.getTransaction().begin(); - UnversionedCascadeOne one = new UnversionedCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role = UnversionedCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (UnversionedCascadeOne) s.merge( one ); - - // after merging, one.getManies() should still be null; - // the EntityEntry loaded state should contain a PersistentCollection though. - - assertNull( one.getManies() ); - eeOne = getEntityEntry( s, one ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertNotNull( maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManiesOrig = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManiesOrig ); - assertEquals( role, ceManiesOrig.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesOrig.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesOrig.getKey() ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManiesOrig.getRole() ); - assertNull( ceManiesOrig.getLoadedPersister() ); - assertNull( ceManiesOrig.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // Ensure eeOne.getLoadedState() returns null for collection after flush. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - - s.getTransaction().commit(); - s.close(); - } - - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testGetAndNullifyCollection() { - Session s = openSession(); - s.getTransaction().begin(); - UnversionedCascadeOne one = new UnversionedCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role = UnversionedCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (UnversionedCascadeOne) s.get( UnversionedCascadeOne.class, one.getId() ); - - // When returned by Session.get(), one.getManies() will return a PersistentCollection; - // the EntityEntry loaded state should contain the same PersistentCollection. - - eeOne = getEntityEntry( s, one ); - assertNotNull( one.getManies() ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertSame( one.getManies(), maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManies = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManies ); - assertEquals( role, ceManies.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManies.getLoadedPersister() ); - assertEquals( one.getId(), ceManies.getKey() ); - - // nullify collection - one.setManies( null ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManies.getRole() ); - assertNull( ceManies.getLoadedPersister() ); - assertNull( ceManies.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // Ensure eeOne.getLoadedState() returns null for collection after flush. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - s.getTransaction().commit(); - s.close(); - } - - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testGetAndReplaceCollection() { - Session s = openSession(); - s.getTransaction().begin(); - UnversionedCascadeOne one = new UnversionedCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role = UnversionedCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (UnversionedCascadeOne) s.get( UnversionedCascadeOne.class, one.getId() ); - - // When returned by Session.get(), one.getManies() will return a PersistentCollection; - // the EntityEntry loaded state should contain the same PersistentCollection. - - eeOne = getEntityEntry( s, one ); - assertNotNull( one.getManies() ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertSame( one.getManies(), maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManiesOrig = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManiesOrig ); - assertEquals( role, ceManiesOrig.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesOrig.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesOrig.getKey() ); - - // replace collection - one.setManies( new HashSet() ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManiesOrig.getRole() ); - assertNull( ceManiesOrig.getLoadedPersister() ); - assertNull( ceManiesOrig.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // one.getManies() should be "wrapped" by a PersistentCollection now; role, key, and session should be set properly. - assertTrue( PersistentCollection.class.isInstance( one.getManies() ) ); - assertEquals( role, ( (PersistentCollection) one.getManies() ).getRole() ); - assertEquals( one.getId(), ( (PersistentCollection) one.getManies() ).getKey() ); - assertSame( s, ( (AbstractPersistentCollection) one.getManies() ).getSession() ); - - // Ensure eeOne.getLoadedState() contains the new collection. - assertSame( one.getManies(), eeOne.getLoadedValue( "manies" ) ); - - // Ensure there is a new CollectionEntry for the new collection and that role, persister, and key are set properly. - CollectionEntry ceManiesAfterReplace = getCollectionEntry( s, (PersistentCollection) one.getManies() ); - assertNotNull( ceManiesAfterReplace ); - assertEquals( role, ceManiesAfterReplace.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesAfterReplace.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesAfterReplace.getKey() ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - - s.getTransaction().commit(); - s.close(); - } - - @Test - public void testSaveOrUpdateNullCollection() { - Session s = openSession(); - s.getTransaction().begin(); - UnversionedCascadeOne one = new UnversionedCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - s = openSession(); - s.getTransaction().begin(); - s.saveOrUpdate( one ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure the EntityEntry loaded state contains null for the manies collection. - eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - - s.flush(); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure the EntityEntry loaded state still contains null for the manies collection. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - s.getTransaction().commit(); - s.close(); - } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - UnversionedCascadeOne.class, - Many.class - }; + protected Class getCollectionOwnerClass() { + return UnversionedCascadeOne.class; } - } \ No newline at end of file diff --git a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedCascadeOne.java b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedCascadeOne.java index 005d62634d..98f73c6231 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedCascadeOne.java +++ b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedCascadeOne.java @@ -36,7 +36,7 @@ import javax.persistence.Version; * @author Gail Badner */ @Entity -public class UnversionedCascadeOne { +public class UnversionedCascadeOne implements One { @Id @GeneratedValue private long id; diff --git a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedNoCascadeDereferencedCollectionTest.java b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedNoCascadeDereferencedCollectionTest.java index a73c513b96..655e36d81e 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedNoCascadeDereferencedCollectionTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedNoCascadeDereferencedCollectionTest.java @@ -23,312 +23,17 @@ */ package org.hibernate.test.collection.dereferenced; -import java.util.HashSet; - import org.junit.Test; -import org.hibernate.Session; -import org.hibernate.collection.internal.AbstractPersistentCollection; -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.testing.TestForIssue; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; +import org.hibernate.testing.FailureExpected; /** * @author Gail Badner */ public class UnversionedNoCascadeDereferencedCollectionTest extends AbstractDereferencedCollectionTest { - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testMergeNullCollection() { - Session s = openSession(); - s.getTransaction().begin(); - UnversionedNoCascadeOne one = new UnversionedNoCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role = UnversionedNoCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (UnversionedNoCascadeOne) s.merge( one ); - - // after merging, one.getManies() should still be null; - // the EntityEntry loaded state should contain a PersistentCollection though. - - assertNull( one.getManies() ); - eeOne = getEntityEntry( s, one ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertNotNull( maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManiesOrig = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManiesOrig ); - assertEquals( role, ceManiesOrig.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesOrig.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesOrig.getKey() ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManiesOrig.getRole() ); - assertNull( ceManiesOrig.getLoadedPersister() ); - assertNull( ceManiesOrig.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // Ensure eeOne.getLoadedState() returns null for collection after flush. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - - s.getTransaction().commit(); - s.close(); - } - - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testGetAndNullifyCollection() { - Session s = openSession(); - s.getTransaction().begin(); - UnversionedNoCascadeOne one = new UnversionedNoCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role = UnversionedNoCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (UnversionedNoCascadeOne) s.get( UnversionedNoCascadeOne.class, one.getId() ); - - // When returned by Session.get(), one.getManies() will return a PersistentCollection; - // the EntityEntry loaded state should contain the same PersistentCollection. - - eeOne = getEntityEntry( s, one ); - assertNotNull( one.getManies() ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertSame( one.getManies(), maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManies = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManies ); - assertEquals( role, ceManies.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManies.getLoadedPersister() ); - assertEquals( one.getId(), ceManies.getKey() ); - - // nullify collection - one.setManies( null ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManies.getRole() ); - assertNull( ceManies.getLoadedPersister() ); - assertNull( ceManies.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // Ensure eeOne.getLoadedState() returns null for collection after flush. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - s.getTransaction().commit(); - s.close(); - } - - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testGetAndReplaceCollection() { - Session s = openSession(); - s.getTransaction().begin(); - UnversionedNoCascadeOne one = new UnversionedNoCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role = UnversionedNoCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (UnversionedNoCascadeOne) s.get( UnversionedNoCascadeOne.class, one.getId() ); - - // When returned by Session.get(), one.getManies() will return a PersistentCollection; - // the EntityEntry loaded state should contain the same PersistentCollection. - - eeOne = getEntityEntry( s, one ); - assertNotNull( one.getManies() ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertSame( one.getManies(), maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManiesOrig = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManiesOrig ); - assertEquals( role, ceManiesOrig.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesOrig.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesOrig.getKey() ); - - // replace collection - one.setManies( new HashSet() ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManiesOrig.getRole() ); - assertNull( ceManiesOrig.getLoadedPersister() ); - assertNull( ceManiesOrig.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // one.getManies() should be "wrapped" by a PersistentCollection now; role, key, and session should be set properly. - assertTrue( PersistentCollection.class.isInstance( one.getManies() ) ); - assertEquals( role, ( (PersistentCollection) one.getManies() ).getRole() ); - assertEquals( one.getId(), ( (PersistentCollection) one.getManies() ).getKey() ); - assertSame( s, ( (AbstractPersistentCollection) one.getManies() ).getSession() ); - - // Ensure eeOne.getLoadedState() contains the new collection. - assertSame( one.getManies(), eeOne.getLoadedValue( "manies" ) ); - - // Ensure there is a new CollectionEntry for the new collection and that role, persister, and key are set properly. - CollectionEntry ceManiesAfterReplace = getCollectionEntry( s, (PersistentCollection) one.getManies() ); - assertNotNull( ceManiesAfterReplace ); - assertEquals( role, ceManiesAfterReplace.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesAfterReplace.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesAfterReplace.getKey() ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - - s.getTransaction().commit(); - s.close(); - } - - @Test - public void testSaveOrUpdateNullCollection() { - Session s = openSession(); - s.getTransaction().begin(); - UnversionedNoCascadeOne one = new UnversionedNoCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - s = openSession(); - s.getTransaction().begin(); - s.saveOrUpdate( one ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure the EntityEntry loaded state contains null for the manies collection. - eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - - s.flush(); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure the EntityEntry loaded state still contains null for the manies collection. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - s.getTransaction().commit(); - s.close(); - } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - UnversionedNoCascadeOne.class, - Many.class - }; + protected Class getCollectionOwnerClass() { + return UnversionedNoCascadeOne.class; } } diff --git a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedNoCascadeOne.java b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedNoCascadeOne.java index 799fa2155d..3170bdb712 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedNoCascadeOne.java +++ b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/UnversionedNoCascadeOne.java @@ -35,7 +35,7 @@ import javax.persistence.OneToMany; * @author Gail Badner */ @Entity -public class UnversionedNoCascadeOne { +public class UnversionedNoCascadeOne implements One { @Id @GeneratedValue private long id; diff --git a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedCascadeDereferencedCollectionTest.java b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedCascadeDereferencedCollectionTest.java index 6d335cce79..9fce820425 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedCascadeDereferencedCollectionTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedCascadeDereferencedCollectionTest.java @@ -23,312 +23,13 @@ */ package org.hibernate.test.collection.dereferenced; -import java.util.HashSet; - -import org.junit.Test; - -import org.hibernate.Session; -import org.hibernate.collection.internal.AbstractPersistentCollection; -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.testing.TestForIssue; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; - /** * @author Gail Badner */ public class VersionedCascadeDereferencedCollectionTest extends AbstractDereferencedCollectionTest { - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testMergeNullCollection() { - Session s = openSession(); - s.getTransaction().begin(); - VersionedCascadeOne one = new VersionedCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role = VersionedCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (VersionedCascadeOne) s.merge( one ); - - // after merging, one.getManies() should still be null; - // the EntityEntry loaded state should contain a PersistentCollection though. - - assertNull( one.getManies() ); - eeOne = getEntityEntry( s, one ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertNotNull( maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManiesOrig = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManiesOrig ); - assertEquals( role, ceManiesOrig.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesOrig.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesOrig.getKey() ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManiesOrig.getRole() ); - assertNull( ceManiesOrig.getLoadedPersister() ); - assertNull( ceManiesOrig.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // Ensure eeOne.getLoadedState() returns null for collection after flush. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - - s.getTransaction().commit(); - s.close(); - } - - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testGetAndNullifyCollection() { - Session s = openSession(); - s.getTransaction().begin(); - VersionedCascadeOne one = new VersionedCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role = VersionedCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (VersionedCascadeOne) s.get( VersionedCascadeOne.class, one.getId() ); - - // When returned by Session.get(), one.getManies() will return a PersistentCollection; - // the EntityEntry loaded state should contain the same PersistentCollection. - - eeOne = getEntityEntry( s, one ); - assertNotNull( one.getManies() ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertSame( one.getManies(), maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManies = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManies ); - assertEquals( role, ceManies.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManies.getLoadedPersister() ); - assertEquals( one.getId(), ceManies.getKey() ); - - // nullify collection - one.setManies( null ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManies.getRole() ); - assertNull( ceManies.getLoadedPersister() ); - assertNull( ceManies.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // Ensure eeOne.getLoadedState() returns null for collection after flush. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - s.getTransaction().commit(); - s.close(); - } - - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testGetAndReplaceCollection() { - Session s = openSession(); - s.getTransaction().begin(); - VersionedCascadeOne one = new VersionedCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role = VersionedCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (VersionedCascadeOne) s.get( VersionedCascadeOne.class, one.getId() ); - - // When returned by Session.get(), one.getManies() will return a PersistentCollection; - // the EntityEntry loaded state should contain the same PersistentCollection. - - eeOne = getEntityEntry( s, one ); - assertNotNull( one.getManies() ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertSame( one.getManies(), maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManiesOrig = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManiesOrig ); - assertEquals( role, ceManiesOrig.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesOrig.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesOrig.getKey() ); - - // replace collection - one.setManies( new HashSet() ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManiesOrig.getRole() ); - assertNull( ceManiesOrig.getLoadedPersister() ); - assertNull( ceManiesOrig.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // one.getManies() should be "wrapped" by a PersistentCollection now; role, key, and session should be set properly. - assertTrue( PersistentCollection.class.isInstance( one.getManies() ) ); - assertEquals( role, ( (PersistentCollection) one.getManies() ).getRole() ); - assertEquals( one.getId(), ( (PersistentCollection) one.getManies() ).getKey() ); - assertSame( s, ( (AbstractPersistentCollection) one.getManies() ).getSession() ); - - // Ensure eeOne.getLoadedState() contains the new collection. - assertSame( one.getManies(), eeOne.getLoadedValue( "manies" ) ); - - // Ensure there is a new CollectionEntry for the new collection and that role, persister, and key are set properly. - CollectionEntry ceManiesAfterReplace = getCollectionEntry( s, (PersistentCollection) one.getManies() ); - assertNotNull( ceManiesAfterReplace ); - assertEquals( role, ceManiesAfterReplace.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesAfterReplace.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesAfterReplace.getKey() ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - - s.getTransaction().commit(); - s.close(); - } - - @Test - public void testSaveOrUpdateNullCollection() { - Session s = openSession(); - s.getTransaction().begin(); - VersionedCascadeOne one = new VersionedCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - s = openSession(); - s.getTransaction().begin(); - s.saveOrUpdate( one ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure the EntityEntry loaded state contains null for the manies collection. - eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - - s.flush(); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure the EntityEntry loaded state still contains null for the manies collection. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - s.getTransaction().commit(); - s.close(); - } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - VersionedCascadeOne.class, - Many.class - }; + protected Class getCollectionOwnerClass() { + return VersionedCascadeOne.class; } } diff --git a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedCascadeOne.java b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedCascadeOne.java index a079bf8af2..43dd0113a3 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedCascadeOne.java +++ b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedCascadeOne.java @@ -36,7 +36,7 @@ import javax.persistence.Version; * @author Gail Badner */ @Entity -public class VersionedCascadeOne { +public class VersionedCascadeOne implements One { @Id @GeneratedValue private long id; diff --git a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedNoCascadeDereferencedCollectionTest.java b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedNoCascadeDereferencedCollectionTest.java index 72a832e7ac..e10a7f1f43 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedNoCascadeDereferencedCollectionTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedNoCascadeDereferencedCollectionTest.java @@ -23,312 +23,13 @@ */ package org.hibernate.test.collection.dereferenced; -import java.util.HashSet; - -import org.junit.Test; - -import org.hibernate.Session; -import org.hibernate.collection.internal.AbstractPersistentCollection; -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.testing.TestForIssue; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; - /** * @author Gail Badner */ public class VersionedNoCascadeDereferencedCollectionTest extends AbstractDereferencedCollectionTest { - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testMergeNullCollection() { - Session s = openSession(); - s.getTransaction().begin(); - VersionedNoCascadeOne one = new VersionedNoCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role =VersionedNoCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (VersionedNoCascadeOne) s.merge( one ); - - // after merging, one.getManies() should still be null; - // the EntityEntry loaded state should contain a PersistentCollection though. - - assertNull( one.getManies() ); - eeOne = getEntityEntry( s, one ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertNotNull( maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManiesOrig = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManiesOrig ); - assertEquals( role, ceManiesOrig.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesOrig.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesOrig.getKey() ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManiesOrig.getRole() ); - assertNull( ceManiesOrig.getLoadedPersister() ); - assertNull( ceManiesOrig.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // Ensure eeOne.getLoadedState() returns null for collection after flush. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - - s.getTransaction().commit(); - s.close(); - } - - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testGetAndNullifyCollection() { - Session s = openSession(); - s.getTransaction().begin(); - VersionedNoCascadeOne one = new VersionedNoCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role =VersionedNoCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (VersionedNoCascadeOne) s.get(VersionedNoCascadeOne.class, one.getId() ); - - // When returned by Session.get(), one.getManies() will return a PersistentCollection; - // the EntityEntry loaded state should contain the same PersistentCollection. - - eeOne = getEntityEntry( s, one ); - assertNotNull( one.getManies() ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertSame( one.getManies(), maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManies = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManies ); - assertEquals( role, ceManies.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManies.getLoadedPersister() ); - assertEquals( one.getId(), ceManies.getKey() ); - - // nullify collection - one.setManies( null ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManies.getRole() ); - assertNull( ceManies.getLoadedPersister() ); - assertNull( ceManies.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // Ensure eeOne.getLoadedState() returns null for collection after flush. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - s.getTransaction().commit(); - s.close(); - } - - @Test - @TestForIssue( jiraKey = "HHH-9777" ) - public void testGetAndReplaceCollection() { - Session s = openSession(); - s.getTransaction().begin(); - VersionedNoCascadeOne one = new VersionedNoCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - final String role =VersionedNoCascadeOne.class.getName() + ".manies"; - - s = openSession(); - s.getTransaction().begin(); - one = (VersionedNoCascadeOne) s.get(VersionedNoCascadeOne.class, one.getId() ); - - // When returned by Session.get(), one.getManies() will return a PersistentCollection; - // the EntityEntry loaded state should contain the same PersistentCollection. - - eeOne = getEntityEntry( s, one ); - assertNotNull( one.getManies() ); - AbstractPersistentCollection maniesEEOneStateOrig = (AbstractPersistentCollection) eeOne.getLoadedValue( "manies" ); - assertSame( one.getManies(), maniesEEOneStateOrig ); - - // Ensure maniesEEOneStateOrig has role, key, and session properly defined (even though one.manies == null) - assertEquals( role, maniesEEOneStateOrig.getRole() ); - assertEquals( one.getId(), maniesEEOneStateOrig.getKey() ); - assertSame( s, maniesEEOneStateOrig.getSession() ); - - // Ensure there is a CollectionEntry for maniesEEOneStateOrig and that the role, persister, and key are set properly. - CollectionEntry ceManiesOrig = getCollectionEntry( s, maniesEEOneStateOrig ); - assertNotNull( ceManiesOrig ); - assertEquals( role, ceManiesOrig.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesOrig.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesOrig.getKey() ); - - // replace collection - one.setManies( new HashSet() ); - - s.flush(); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure CollectionEntry for maniesEEOneStateOrig is no longer in the PersistenceContext. - assertNull( getCollectionEntry( s, maniesEEOneStateOrig ) ); - - // Ensure the original CollectionEntry has role, persister, and key set to null. - assertNull( ceManiesOrig.getRole() ); - assertNull( ceManiesOrig.getLoadedPersister() ); - assertNull( ceManiesOrig.getKey() ); - - // Ensure the PersistentCollection (that was previously returned by eeOne.getLoadedState()) - // has key and role set to null. - assertNull( maniesEEOneStateOrig.getKey() ); - assertNull( maniesEEOneStateOrig.getRole() ); - - // one.getManies() should be "wrapped" by a PersistentCollection now; role, key, and session should be set properly. - assertTrue( PersistentCollection.class.isInstance( one.getManies() ) ); - assertEquals( role, ( (PersistentCollection) one.getManies() ).getRole() ); - assertEquals( one.getId(), ( (PersistentCollection) one.getManies() ).getKey() ); - assertSame( s, ( (AbstractPersistentCollection) one.getManies() ).getSession() ); - - // Ensure eeOne.getLoadedState() contains the new collection. - assertSame( one.getManies(), eeOne.getLoadedValue( "manies" ) ); - - // Ensure there is a new CollectionEntry for the new collection and that role, persister, and key are set properly. - CollectionEntry ceManiesAfterReplace = getCollectionEntry( s, (PersistentCollection) one.getManies() ); - assertNotNull( ceManiesAfterReplace ); - assertEquals( role, ceManiesAfterReplace.getRole() ); - assertSame( sessionFactory().getCollectionPersister( role ), ceManiesAfterReplace.getLoadedPersister() ); - assertEquals( one.getId(), ceManiesAfterReplace.getKey() ); - - // Ensure the session in maniesEEOneStateOrig has been unset. - assertNull( maniesEEOneStateOrig.getSession() ); - - s.getTransaction().commit(); - s.close(); - } - - @Test - public void testSaveOrUpdateNullCollection() { - Session s = openSession(); - s.getTransaction().begin(); - VersionedNoCascadeOne one = new VersionedNoCascadeOne(); - assertNull( one.getManies() ); - s.save( one ); - assertNull( one.getManies() ); - EntityEntry eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.flush(); - assertNull( one.getManies() ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - s.getTransaction().commit(); - s.close(); - - s = openSession(); - s.getTransaction().begin(); - s.saveOrUpdate( one ); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure the EntityEntry loaded state contains null for the manies collection. - eeOne = getEntityEntry( s, one ); - assertNull( eeOne.getLoadedValue( "manies" ) ); - - s.flush(); - - // Ensure one.getManies() is still null. - assertNull( one.getManies() ); - - // Ensure the same EntityEntry is being used. - assertSame( eeOne, getEntityEntry( s, one ) ); - - // Ensure the EntityEntry loaded state still contains null for the manies collection. - assertNull( eeOne.getLoadedValue( "manies" ) ); - - s.getTransaction().commit(); - s.close(); - } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - VersionedNoCascadeOne.class, - Many.class - }; + protected Class getCollectionOwnerClass() { + return VersionedNoCascadeOne.class; } } diff --git a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedNoCascadeOne.java b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedNoCascadeOne.java index c7651f187f..aff3b1e9f1 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedNoCascadeOne.java +++ b/hibernate-core/src/test/java/org/hibernate/test/collection/dereferenced/VersionedNoCascadeOne.java @@ -36,7 +36,7 @@ import javax.persistence.Version; * @author Gail Badner */ @Entity -public class VersionedNoCascadeOne { +public class VersionedNoCascadeOne implements One { @Id @GeneratedValue private long id;