Fix for HHH-9419 into master
See https://github.com/hibernate/hibernate-orm/pull/815
This commit is contained in:
parent
b3e4ba0b62
commit
c80a8c442a
|
@ -55,6 +55,11 @@ public class EntityVerifyVersionProcess implements BeforeTransactionCompletionPr
|
|||
public void doBeforeTransactionCompletion(SessionImplementor session) {
|
||||
final EntityPersister persister = entry.getPersister();
|
||||
|
||||
if ( !entry.isExistsInDatabase() ) {
|
||||
// HHH-9419: We cannot check for a version of an entry we ourselves deleted
|
||||
return;
|
||||
}
|
||||
|
||||
final Object latestVersion = persister.getCurrentVersion( entry.getId(), session );
|
||||
if ( !entry.getVersion().equals( latestVersion ) ) {
|
||||
throw new OptimisticLockException(
|
||||
|
|
|
@ -293,6 +293,31 @@ public class QueryLockingTest extends BaseEntityManagerFunctionalTestCase {
|
|||
em.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-9419")
|
||||
public void testNoVersionCheckAfterRemove() {
|
||||
EntityManager em = getOrCreateEntityManager();
|
||||
em.getTransaction().begin();
|
||||
Lockable lock = new Lockable( "name" );
|
||||
em.persist( lock );
|
||||
em.getTransaction().commit();
|
||||
em.close();
|
||||
Integer initial = lock.getVersion();
|
||||
assertNotNull( initial );
|
||||
|
||||
em = getOrCreateEntityManager();
|
||||
em.getTransaction().begin();
|
||||
Lockable reread = em.createQuery( "from Lockable", Lockable.class )
|
||||
.setLockMode( LockModeType.OPTIMISTIC )
|
||||
.getSingleResult();
|
||||
assertEquals( initial, reread.getVersion() );
|
||||
assertTrue( em.unwrap( SessionImpl.class ).getActionQueue().hasBeforeTransactionActions() );
|
||||
em.remove( reread );
|
||||
em.getTransaction().commit();
|
||||
em.close();
|
||||
assertEquals( initial, reread.getVersion() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOptimisticSpecific() {
|
||||
EntityManager em = getOrCreateEntityManager();
|
||||
|
|
Loading…
Reference in New Issue