[hibernate-commits] Hibernate SVN: r18700 - in core/trunk: testsuite/src/test/java/org/hibernate/test/readonly and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Feb 5 01:25:59 EST 2010


Author: gbadner
Date: 2010-02-05 01:25:59 -0500 (Fri, 05 Feb 2010)
New Revision: 18700

Modified:
   core/trunk/core/src/main/java/org/hibernate/event/def/DefaultRefreshEventListener.java
   core/trunk/testsuite/src/test/java/org/hibernate/test/readonly/ReadOnlyProxyTest.java
Log:
HHH-4880 : EntityManager.refresh does not throw EntityNotFoundException for removed entity

Modified: core/trunk/core/src/main/java/org/hibernate/event/def/DefaultRefreshEventListener.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/event/def/DefaultRefreshEventListener.java	2010-02-05 04:00:04 UTC (rev 18699)
+++ core/trunk/core/src/main/java/org/hibernate/event/def/DefaultRefreshEventListener.java	2010-02-05 06:25:59 UTC (rev 18700)
@@ -151,7 +151,9 @@
 		Object result = persister.load( id, object, event.getLockOptions(), source );
 		// Keep the same read-only/modifiable setting for the entity that it had before refreshing;
 		// If it was transient, then set it to the default for the source.
-		source.setReadOnly( result, ( e == null ? source.isDefaultReadOnly() : e.isReadOnly() ) );
+		if ( result != null ) {
+			source.setReadOnly( result, ( e == null ? source.isDefaultReadOnly() : e.isReadOnly() ) );
+		}
 		source.setFetchProfile(previousFetchProfile);
 		
 		UnresolvableObjectException.throwIfNull( result, id, persister.getEntityName() );

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/readonly/ReadOnlyProxyTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/readonly/ReadOnlyProxyTest.java	2010-02-05 04:00:04 UTC (rev 18699)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/readonly/ReadOnlyProxyTest.java	2010-02-05 06:25:59 UTC (rev 18700)
@@ -38,6 +38,7 @@
 import org.hibernate.Transaction;
 import org.hibernate.TransientObjectException;
 import org.hibernate.SessionException;
+import org.hibernate.UnresolvableObjectException;
 import org.hibernate.engine.SessionImplementor;
 import org.hibernate.proxy.HibernateProxy;
 import org.hibernate.proxy.LazyInitializer;
@@ -882,7 +883,88 @@
 		s.delete( dp );
 		t.commit();
 		s.close();
+	}
 
+
+	public void testReadOnlyRefreshDeleted() {
+		Session s = openSession();
+		s.setCacheMode(CacheMode.IGNORE);
+		Transaction t = s.beginTransaction();
+		DataPoint dp = new DataPoint();
+		dp.setDescription( "original" );
+		dp.setX( new BigDecimal(0.1d).setScale(19, BigDecimal.ROUND_DOWN) );
+		dp.setY( new BigDecimal( Math.cos( dp.getX().doubleValue() ) ).setScale(19, BigDecimal.ROUND_DOWN) );
+		s.save(dp);
+		t.commit();
+		s.close();
+
+		s = openSession();
+		s.setCacheMode(CacheMode.IGNORE);
+		t = s.beginTransaction();
+		HibernateProxy dpProxy = ( HibernateProxy ) s.load( DataPoint.class, dp.getId() );
+		assertFalse( Hibernate.isInitialized( dpProxy ) );
+		t.commit();
+		s.close();
+
+		s = openSession();
+		s.setCacheMode(CacheMode.IGNORE);
+		t = s.beginTransaction();
+		dp = ( DataPoint ) s.get( DataPoint.class, dp.getId() );
+		s.delete( dp );
+		s.flush();
+		try {
+			s.refresh( dp );
+			fail( "should have thrown UnresolvableObjectException" );
+		}
+		catch ( UnresolvableObjectException ex ) {
+			// expected
+		}
+		finally {
+			t.rollback();
+			s.close();
+		}
+
+		s = openSession();
+		t = s.beginTransaction();
+		s.setCacheMode(CacheMode.IGNORE);
+		DataPoint dpProxyInit = ( DataPoint ) s.load( DataPoint.class, dp.getId() );
+		assertEquals( "original", dp.getDescription() );
+		s.delete( dpProxyInit );
+		t.commit();
+		s.close();
+
+		s = openSession();
+		t = s.beginTransaction();
+		assertTrue( dpProxyInit instanceof HibernateProxy );
+		assertTrue( Hibernate.isInitialized( dpProxyInit ) );
+		try {
+			s.refresh( dpProxyInit );
+			fail( "should have thrown UnresolvableObjectException" );
+		}
+		catch ( UnresolvableObjectException ex ) {
+			// expected
+		}
+		finally {
+			t.rollback();
+			s.close();
+		}
+
+		s = openSession();
+		t = s.beginTransaction();
+		assertTrue( dpProxy instanceof HibernateProxy );
+		try {
+			s.refresh( dpProxy );
+			assertFalse( Hibernate.isInitialized( dpProxy ) );
+			Hibernate.initialize( dpProxy );
+			fail( "should have thrown UnresolvableObjectException" );
+		}
+		catch ( UnresolvableObjectException ex ) {
+			// expected
+		}
+		finally {
+			t.rollback();
+			s.close();
+		}
 	}
 
 	public void testReadOnlyRefreshDetached() {



More information about the hibernate-commits mailing list