HHH-17828 Add test for issue
This commit is contained in:
parent
b567483f9f
commit
47d8bea6a4
|
@ -0,0 +1,119 @@
|
||||||
|
package org.hibernate.orm.test.locking;
|
||||||
|
|
||||||
|
import org.hibernate.Hibernate;
|
||||||
|
|
||||||
|
import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner;
|
||||||
|
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
|
||||||
|
import org.hibernate.testing.orm.junit.Jira;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.FetchType;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.LockModeType;
|
||||||
|
import jakarta.persistence.ManyToOne;
|
||||||
|
import jakarta.persistence.Version;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertSame;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
@RunWith( BytecodeEnhancerRunner.class )
|
||||||
|
@Jira( "https://hibernate.atlassian.net/browse/HHH-17828" )
|
||||||
|
public class LockExistingBytecodeProxyTest extends BaseNonConfigCoreFunctionalTestCase {
|
||||||
|
@Override
|
||||||
|
protected Class<?>[] getAnnotatedClasses() {
|
||||||
|
return new Class<?>[] {
|
||||||
|
MainEntity.class,
|
||||||
|
ReferencedEntity.class,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFindAndLockAfterFind() {
|
||||||
|
inTransaction( session -> {
|
||||||
|
final MainEntity main = session.find( MainEntity.class, 1L );
|
||||||
|
assertFalse( Hibernate.isInitialized( main.referenced ) );
|
||||||
|
final ReferencedEntity lazyEntity = session.find( ReferencedEntity.class, 1L, LockModeType.PESSIMISTIC_WRITE );
|
||||||
|
assertEquals( LockModeType.PESSIMISTIC_WRITE, session.getLockMode( lazyEntity ) );
|
||||||
|
assertTrue( Hibernate.isInitialized( main.referenced ) );
|
||||||
|
assertSame( lazyEntity, main.referenced );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLockAfterFind() {
|
||||||
|
inTransaction( session -> {
|
||||||
|
final MainEntity main = session.find( MainEntity.class, 1L );
|
||||||
|
assertFalse( Hibernate.isInitialized( main.referenced ) );
|
||||||
|
session.lock( main.referenced, LockModeType.PESSIMISTIC_FORCE_INCREMENT );
|
||||||
|
assertEquals( LockModeType.PESSIMISTIC_FORCE_INCREMENT, session.getLockMode( main.referenced ) );
|
||||||
|
assertTrue( Hibernate.isInitialized( main.referenced ) );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
inTransaction( session -> {
|
||||||
|
final ReferencedEntity e1 = new ReferencedEntity( 1L, "referenced" );
|
||||||
|
session.persist( e1 );
|
||||||
|
session.persist( new MainEntity( 1L, e1 ) );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() {
|
||||||
|
inTransaction( session -> {
|
||||||
|
session.createMutationQuery( "delete from MainEntity" ).executeUpdate();
|
||||||
|
session.createMutationQuery( "delete from ReferencedEntity" ).executeUpdate();
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity( name = "MainEntity" )
|
||||||
|
public static class MainEntity {
|
||||||
|
@Id
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ManyToOne( fetch = FetchType.LAZY )
|
||||||
|
private ReferencedEntity referenced;
|
||||||
|
|
||||||
|
protected MainEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainEntity(long id, ReferencedEntity referenced) {
|
||||||
|
this.id = id;
|
||||||
|
this.referenced = referenced;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReferencedEntity getReferenced() {
|
||||||
|
return referenced;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity( name = "ReferencedEntity" )
|
||||||
|
public static class ReferencedEntity {
|
||||||
|
@Id
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Version
|
||||||
|
private Long version;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
protected ReferencedEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReferencedEntity(long id, String name) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getVersion() {
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue