HHH-2921 : added test cases that execute polymorphic queries when there is a superclass proxy for the resulting entity in the session cache
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@14160 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
34c7ec1cd3
commit
27223c6b04
|
@ -1,4 +1,4 @@
|
||||||
//$Id: DiscriminatorTest.java 10977 2006-12-12 23:28:04Z steve.ebersole@jboss.com $
|
//$Id: DiscriminatorTest.java 10976 2006-12-12 23:22:26Z steve.ebersole@jboss.com $
|
||||||
package org.hibernate.test.discriminator;
|
package org.hibernate.test.discriminator;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
@ -10,7 +10,9 @@ import junit.framework.Test;
|
||||||
import org.hibernate.Hibernate;
|
import org.hibernate.Hibernate;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.Transaction;
|
import org.hibernate.Transaction;
|
||||||
|
import org.hibernate.proxy.HibernateProxy;
|
||||||
import org.hibernate.criterion.Property;
|
import org.hibernate.criterion.Property;
|
||||||
|
import org.hibernate.criterion.Restrictions;
|
||||||
import org.hibernate.junit.functional.FunctionalTestCase;
|
import org.hibernate.junit.functional.FunctionalTestCase;
|
||||||
import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
|
import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
|
||||||
|
|
||||||
|
@ -171,6 +173,82 @@ public class DiscriminatorTest extends FunctionalTestCase {
|
||||||
s.close();
|
s.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testLoadSuperclassProxyPolymorphicAccess() {
|
||||||
|
Session s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
Employee e = new Employee();
|
||||||
|
e.setName( "Steve" );
|
||||||
|
e.setSex( 'M' );
|
||||||
|
e.setTitle( "grand poobah" );
|
||||||
|
s.save( e );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
|
||||||
|
s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
// load the superclass proxy.
|
||||||
|
Person pLoad = ( Person ) s.load( Person.class, new Long( e.getId() ) );
|
||||||
|
assertTrue( pLoad instanceof HibernateProxy);
|
||||||
|
Person pGet = ( Person ) s.get( Person.class, new Long( e.getId() ));
|
||||||
|
Person pQuery = ( Person ) s.createQuery( "from Person where id = :id" )
|
||||||
|
.setLong( "id", e.getId() )
|
||||||
|
.uniqueResult();
|
||||||
|
Person pCriteria = ( Person ) s.createCriteria( Person.class )
|
||||||
|
.add( Restrictions.idEq( new Long( e.getId() ) ) )
|
||||||
|
.uniqueResult();
|
||||||
|
// assert that executing the queries polymorphically returns the same proxy
|
||||||
|
assertSame( pLoad, pGet );
|
||||||
|
assertSame( pLoad, pQuery );
|
||||||
|
assertSame( pLoad, pCriteria );
|
||||||
|
|
||||||
|
// assert that the proxy is not an instance of Employee
|
||||||
|
assertFalse( pLoad instanceof Employee );
|
||||||
|
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
|
||||||
|
s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
s.delete( e );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testLoadSuperclassProxyEvictPolymorphicAccess() {
|
||||||
|
Session s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
Employee e = new Employee();
|
||||||
|
e.setName( "Steve" );
|
||||||
|
e.setSex( 'M' );
|
||||||
|
e.setTitle( "grand poobah" );
|
||||||
|
s.save( e );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
|
||||||
|
s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
// load the superclass proxy.
|
||||||
|
Person pLoad = ( Person ) s.load( Person.class, new Long( e.getId() ) );
|
||||||
|
assertTrue( pLoad instanceof HibernateProxy);
|
||||||
|
// evict the proxy
|
||||||
|
s.evict( pLoad );
|
||||||
|
Employee pGet = ( Employee ) s.get( Person.class, new Long( e.getId() ));
|
||||||
|
Employee pQuery = ( Employee ) s.createQuery( "from Person where id = :id" )
|
||||||
|
.setLong( "id", e.getId() )
|
||||||
|
.uniqueResult();
|
||||||
|
Employee pCriteria = ( Employee ) s.createCriteria( Person.class )
|
||||||
|
.add( Restrictions.idEq( new Long( e.getId() ) ) )
|
||||||
|
.uniqueResult();
|
||||||
|
// assert that executing the queries polymorphically returns the same Employee instance
|
||||||
|
assertSame( pGet, pQuery );
|
||||||
|
assertSame( pGet, pCriteria );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
|
||||||
|
s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
s.delete( e );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue