[hibernate-commits] Hibernate SVN: r19459 - core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon May 10 20:29:12 EDT 2010


Author: gbadner
Date: 2010-05-10 20:29:12 -0400 (Mon, 10 May 2010)
New Revision: 19459

Modified:
   core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/Child.java
   core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/Mappings.hbm.xml
   core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/PersistentSetTest.java
Log:
HHH-3799 : Added test for PersistentSet does not honor hashcode/equals contract when loaded eagerly

Modified: core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/Child.java
===================================================================
--- core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/Child.java	2010-05-10 22:18:47 UTC (rev 19458)
+++ core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/Child.java	2010-05-11 00:29:12 UTC (rev 19459)
@@ -8,6 +8,7 @@
 public class Child {
 	private String name;
 	private Parent parent;
+	private String description;
 
 	public Child() {
 	}
@@ -31,4 +32,38 @@
 	public void setParent(Parent parent) {
 		this.parent = parent;
 	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) {
+			return true;
+		}
+		if ( o == null || getClass() != o.getClass() ) {
+			return false;
+		}
+
+		Child child = ( Child ) o;
+
+		if ( description != null ? ! description.equals( child.description ) : child.description != null ) {
+			return false;
+		}
+		if ( ! name.equals( child.name ) ) {
+			return false;
+		}
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result = name.hashCode();
+		result = 31 * result + ( description != null ? description.hashCode() : 0 );
+		return result;
+	}
 }

Modified: core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/Mappings.hbm.xml
===================================================================
--- core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/Mappings.hbm.xml	2010-05-10 22:18:47 UTC (rev 19458)
+++ core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/Mappings.hbm.xml	2010-05-11 00:29:12 UTC (rev 19459)
@@ -32,6 +32,7 @@
     <class name="Child">
         <id name="name" column="NAME" type="string"/>
         <many-to-one name="parent" class="Parent" cascade="none" />
+        <property name="description" type="string"/>
     </class>
 
     <class name="Container">

Modified: core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/PersistentSetTest.java
===================================================================
--- core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/PersistentSetTest.java	2010-05-10 22:18:47 UTC (rev 19458)
+++ core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/collection/set/PersistentSetTest.java	2010-05-11 00:29:12 UTC (rev 19459)
@@ -4,10 +4,12 @@
 
 import junit.framework.Test;
 
+import org.hibernate.CacheMode;
 import org.hibernate.Session;
 import org.hibernate.cfg.Configuration;
 import org.hibernate.cfg.Environment;
 import org.hibernate.collection.PersistentSet;
+import org.hibernate.criterion.Restrictions;
 import org.hibernate.junit.functional.FunctionalTestCase;
 import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
 import org.hibernate.stat.CollectionStatistics;
@@ -273,4 +275,110 @@
 		session.getTransaction().commit();
 		session.close();
 	}
+
+	public void testLoadChildCheckParentContainsChildCache() {
+		Parent parent = new Parent( "p1" );
+		Child child = new Child( "c1" );
+		child.setDescription( "desc1" );
+		parent.getChildren().add( child );
+		child.setParent( parent );
+		Child otherChild = new Child( "c2" );
+		otherChild.setDescription( "desc2" );
+		parent.getChildren().add( otherChild );
+		otherChild.setParent( parent );
+
+		Session session = openSession();
+		session.beginTransaction();
+		session.save( parent );
+		session.getTransaction().commit();
+
+		session = openSession();
+		session.beginTransaction();
+		parent = ( Parent ) session.get( Parent.class, parent.getName() );
+		assertTrue( parent.getChildren().contains( child ) );
+		assertTrue( parent.getChildren().contains( otherChild ) );
+		session.getTransaction().commit();
+
+		session = openSession();
+		session.beginTransaction();
+
+		child = ( Child ) session.get( Child.class, child.getName() );
+		assertTrue( child.getParent().getChildren().contains( child ) );
+		session.clear();
+
+		child = ( Child ) session.createCriteria( Child.class, child.getName() )
+				.setCacheable( true )
+				.add( Restrictions.idEq( "c1" ) )
+				.uniqueResult();
+		assertTrue( child.getParent().getChildren().contains( child ) );
+		assertTrue( child.getParent().getChildren().contains( otherChild ) );
+		session.clear();
+
+		child = ( Child ) session.createCriteria( Child.class, child.getName() )
+				.setCacheable( true )
+				.add( Restrictions.idEq( "c1" ) )
+				.uniqueResult();
+		assertTrue( child.getParent().getChildren().contains( child ) );
+		assertTrue( child.getParent().getChildren().contains( otherChild ) );
+		session.clear();
+
+		child = ( Child ) session.createQuery( "from Child where name = 'c1'" )
+				.setCacheable( true )
+				.uniqueResult();
+		assertTrue( child.getParent().getChildren().contains( child ) );
+
+		child = ( Child ) session.createQuery( "from Child where name = 'c1'" )
+				.setCacheable( true )
+				.uniqueResult();
+		assertTrue( child.getParent().getChildren().contains( child ) );
+
+		session.delete( child.getParent() );
+		session.getTransaction().commit();
+		session.close();
+	}
+
+	public void testLoadChildCheckParentContainsChildNoCache() {
+		Parent parent = new Parent( "p1" );
+		Child child = new Child( "c1" );
+		parent.getChildren().add( child );
+		child.setParent( parent );
+		Child otherChild = new Child( "c2" );
+		parent.getChildren().add( otherChild );
+		otherChild.setParent( parent );
+
+		Session session = openSession();
+		session.beginTransaction();
+		session.save( parent );
+		session.getTransaction().commit();
+
+		session = openSession();
+		session.beginTransaction();
+		session.setCacheMode( CacheMode.IGNORE );
+		parent = ( Parent ) session.get( Parent.class, parent.getName() );
+		assertTrue( parent.getChildren().contains( child ) );
+		assertTrue( parent.getChildren().contains( otherChild ) );
+		session.getTransaction().commit();
+
+		session = openSession();
+		session.beginTransaction();
+		session.setCacheMode( CacheMode.IGNORE );
+
+		child = ( Child ) session.get( Child.class, child.getName() );
+		assertTrue( child.getParent().getChildren().contains( child ) );
+		session.clear();
+
+		child = ( Child ) session.createCriteria( Child.class, child.getName() )
+				.add( Restrictions.idEq( "c1" ) )
+				.uniqueResult();
+		assertTrue( child.getParent().getChildren().contains( child ) );
+		assertTrue( child.getParent().getChildren().contains( otherChild ) );
+		session.clear();
+
+		child = ( Child ) session.createQuery( "from Child where name = 'c1'" ).uniqueResult();
+		assertTrue( child.getParent().getChildren().contains( child ) );
+
+		session.delete( child.getParent() );
+		session.getTransaction().commit();
+		session.close();
+	}
 }



More information about the hibernate-commits mailing list