[hibernate-commits] Hibernate SVN: r10428 - branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Fri Sep 1 17:39:34 EDT 2006
Author: steve.ebersole at jboss.com
Date: 2006-09-01 17:39:34 -0400 (Fri, 01 Sep 2006)
New Revision: 10428
Modified:
branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java
Log:
fixed failures on SQLServer
Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java
===================================================================
--- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java 2006-09-01 21:39:19 UTC (rev 10427)
+++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java 2006-09-01 21:39:34 UTC (rev 10428)
@@ -4,6 +4,8 @@
import org.hibernate.Transaction;
import org.hibernate.LockMode;
import org.hibernate.StaleObjectStateException;
+import org.hibernate.exception.SQLGrammarException;
+import org.hibernate.dialect.SQLServerDialect;
import org.hibernate.test.jpa.AbstractJPATest;
import org.hibernate.test.jpa.Item;
import org.hibernate.test.jpa.Part;
@@ -65,7 +67,12 @@
assertEquals( "encountered non-repeatable read", check, item2.getName() );
assertEquals( "encountered non-repeatable read", initialVersion, item2.getVersion() );
+ t1.commit();
+ s1.close();
+
// clean up
+ s1 = getSessions().openSession();
+ t1 = s1.beginTransaction();
s1.createQuery( "delete Item" ).executeUpdate();
t1.commit();
s1.close();
@@ -117,8 +124,25 @@
catch( StaleObjectStateException expected ) {
// this is the expected behavior
}
+ catch( SQLGrammarException t ) {
+ if ( getDialect() instanceof SQLServerDialect ) {
+ // sql-server (using snapshot isolation) reports this as a grammar exception /:)
+ //
+ // not to mention that it seems to "lose track" of the transaction in this scenario...
+ t1.rollback();
+ t1 = s1.beginTransaction();
+ }
+ else {
+ throw t;
+ }
+ }
+ t1.commit();
+ s1.close();
+
// clean up
+ s1 = getSessions().openSession();
+ t1 = s1.beginTransaction();
s1.createQuery( "delete Item" ).executeUpdate();
t1.commit();
s1.close();
@@ -159,8 +183,14 @@
assertTrue( part == part2 );
assertEquals( "encountered non-repeatable read", check, part2.getName() );
+ t1.commit();
+ s1.close();
+
// clean up
- s1.delete( part );
+ s1 = getSessions().openSession();
+ t1 = s1.beginTransaction();
+ s1.delete( part2 );
+ s1.delete( part2.getItem() );
t1.commit();
s1.close();
}
@@ -202,14 +232,26 @@
assertEquals( "encountered non-repeatable read", check, part2.getName() );
// then acquire an UPGRADE lock; this should fail
- s1.lock( part, LockMode.UPGRADE );
+ try {
+ s1.lock( part, LockMode.UPGRADE );
+ }
+ catch( Throwable t ) {
+ // SQLServer, for example, immediately throws an exception here...
+ t1.rollback();
+ t1 = s1.beginTransaction();
+ }
part2 = ( Part ) s1.get( Part.class, partId );
assertTrue( part == part2 );
assertEquals( "encountered non-repeatable read", check, part2.getName() );
+ t1.commit();
+ s1.close();
+
// clean up
-// s1.refresh( item );
+ s1 = getSessions().openSession();
+ t1 = s1.beginTransaction();
s1.delete( part );
+ s1.delete( part.getItem() );
t1.commit();
s1.close();
}
More information about the hibernate-commits
mailing list