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();
+ }
}
Show replies by date