mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-28 06:49:09 +00:00
HHH-9419 : Remove after get with optimistic lock fails
(cherry picked from commit 3ee73a88b565ebaf76728345ce938e84df9cd7e3)
This commit is contained in:
parent
4506987c24
commit
f5150198de
@ -55,6 +55,11 @@ public EntityVerifyVersionProcess(Object object, EntityEntry entry) {
|
||||
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 void testOptimisticOverall() {
|
||||
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…
x
Reference in New Issue
Block a user