Skip to content

Commit e32d11e

Browse files
mensindabeikov
authored andcommitted
HHH-17395 test case
1 parent 8f2321e commit e32d11e

File tree

1 file changed

+180
-0
lines changed

1 file changed

+180
-0
lines changed
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
package org.hibernate.orm.test.locking;
2+
3+
import java.util.List;
4+
5+
import org.hibernate.Hibernate;
6+
7+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
8+
import org.hibernate.testing.orm.junit.JiraKey;
9+
import org.hibernate.testing.orm.junit.Jpa;
10+
import org.junit.jupiter.api.BeforeAll;
11+
import org.junit.jupiter.api.Test;
12+
13+
import jakarta.persistence.Entity;
14+
import jakarta.persistence.FetchType;
15+
import jakarta.persistence.Id;
16+
import jakarta.persistence.JoinColumn;
17+
import jakarta.persistence.LockModeType;
18+
import jakarta.persistence.OneToOne;
19+
20+
import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
21+
import static org.junit.jupiter.api.Assertions.assertEquals;
22+
import static org.junit.jupiter.api.Assertions.assertFalse;
23+
import static org.junit.jupiter.api.Assertions.assertNotNull;
24+
25+
@JiraKey("HHH-17395")
26+
@Jpa(
27+
annotatedClasses = {
28+
LockRefreshReferencedTest.MainEntity.class,
29+
LockRefreshReferencedTest.ReferencedEntity.class
30+
}
31+
)
32+
public class LockRefreshReferencedTest {
33+
34+
@BeforeAll
35+
public void setUp(EntityManagerFactoryScope scope) {
36+
scope.inTransaction(
37+
entityManager -> {
38+
final ReferencedEntity e1 = new ReferencedEntity( 0L, "lazy" );
39+
final ReferencedEntity e2 = new ReferencedEntity( 1L, "eager" );
40+
entityManager.persist( e1 );
41+
entityManager.persist( e2 );
42+
final MainEntity e3 = new MainEntity( 0L, e1, e2 );
43+
entityManager.persist( e3 );
44+
}
45+
);
46+
}
47+
48+
@Test
49+
public void testRefreshBeforeRead(EntityManagerFactoryScope scope) {
50+
scope.inTransaction(
51+
entityManager -> {
52+
MainEntity m = entityManager.find( MainEntity.class, 0L );
53+
assertNotNull( m );
54+
ReferencedEntity lazyReference = m.referencedLazy();
55+
ReferencedEntity eagerReference = m.referencedEager();
56+
assertNotNull( lazyReference );
57+
assertNotNull( eagerReference );
58+
assertFalse( Hibernate.isInitialized( lazyReference ) );
59+
60+
// First refresh, then access
61+
entityManager.refresh( eagerReference, LockModeType.PESSIMISTIC_WRITE );
62+
assertFalse( Hibernate.isInitialized( lazyReference ) );
63+
64+
entityManager.refresh( lazyReference, LockModeType.PESSIMISTIC_WRITE );
65+
66+
assertEquals( "lazy", lazyReference.status() );
67+
assertEquals( "eager", eagerReference.status() );
68+
assertEquals( LockModeType.PESSIMISTIC_WRITE, entityManager.getLockMode( lazyReference ) );
69+
assertEquals( LockModeType.PESSIMISTIC_WRITE, entityManager.getLockMode( eagerReference ) );
70+
} );
71+
}
72+
73+
@Test
74+
public void testRefresh(EntityManagerFactoryScope scope) {
75+
scope.inTransaction(
76+
entityManager -> {
77+
MainEntity m = entityManager.find( MainEntity.class, 0L );
78+
assertNotNull( m );
79+
ReferencedEntity lazyReference = m.referencedLazy();
80+
ReferencedEntity eagerReference = m.referencedEager();
81+
assertNotNull( lazyReference );
82+
assertNotNull( eagerReference );
83+
assertFalse( Hibernate.isInitialized( lazyReference ) );
84+
85+
entityManager.refresh( m );
86+
assertFalse( Hibernate.isInitialized( lazyReference ) );
87+
88+
} );
89+
}
90+
91+
@Test
92+
public void testRefreshAfterRead(EntityManagerFactoryScope scope) {
93+
scope.inTransaction(
94+
entityManager -> {
95+
MainEntity m = entityManager.find( MainEntity.class, 0L );
96+
assertNotNull( m );
97+
ReferencedEntity lazyReference = m.referencedLazy();
98+
ReferencedEntity eagerReference = m.referencedEager();
99+
assertNotNull( lazyReference );
100+
assertNotNull( eagerReference );
101+
assertFalse( Hibernate.isInitialized( lazyReference ) );
102+
103+
// First access, the refresh
104+
assertEquals( "lazy", lazyReference.status() );
105+
assertEquals( "eager", eagerReference.status() );
106+
107+
entityManager.refresh( lazyReference, LockModeType.PESSIMISTIC_WRITE );
108+
entityManager.refresh( eagerReference, LockModeType.PESSIMISTIC_WRITE );
109+
110+
assertEquals( LockModeType.PESSIMISTIC_WRITE, entityManager.getLockMode( lazyReference ) );
111+
assertEquals( LockModeType.PESSIMISTIC_WRITE, entityManager.getLockMode( eagerReference ) );
112+
} );
113+
}
114+
115+
116+
@Test
117+
public void testFindWithLockMode(EntityManagerFactoryScope scope) {
118+
scope.inTransaction(
119+
session -> {
120+
MainEntity mainEntity = session.find( MainEntity.class, 0L, LockModeType.PESSIMISTIC_WRITE );
121+
assertThat( session.getLockMode( mainEntity.referencedEager() ) ).isEqualTo( LockModeType.PESSIMISTIC_WRITE );
122+
}
123+
);
124+
}
125+
126+
@Entity(name = "MainEntity")
127+
public static class MainEntity {
128+
@Id
129+
private Long id;
130+
131+
private String name;
132+
133+
@OneToOne(targetEntity = ReferencedEntity.class, fetch = FetchType.LAZY)
134+
@JoinColumn(name = "LAZY_COLUMN")
135+
private ReferencedEntity referencedLazy;
136+
137+
@OneToOne(targetEntity = ReferencedEntity.class, fetch = FetchType.EAGER)
138+
@JoinColumn(name = "EAGER_COLUMN")
139+
private ReferencedEntity referencedEager;
140+
141+
protected MainEntity() {
142+
}
143+
144+
public MainEntity(Long id, ReferencedEntity lazy, ReferencedEntity eager) {
145+
this.id = id;
146+
this.referencedLazy = lazy;
147+
this.referencedEager = eager;
148+
}
149+
150+
public ReferencedEntity referencedLazy() {
151+
return referencedLazy;
152+
}
153+
154+
public ReferencedEntity referencedEager() {
155+
return referencedEager;
156+
}
157+
}
158+
159+
@Entity(name = "ReferencedEntity")
160+
public static class ReferencedEntity {
161+
162+
@Id
163+
private Long id;
164+
165+
private String status;
166+
167+
protected ReferencedEntity() {
168+
}
169+
170+
public ReferencedEntity(Long id, String status) {
171+
this.id = id;
172+
this.status = status;
173+
}
174+
175+
public String status() {
176+
return status;
177+
}
178+
}
179+
180+
}

0 commit comments

Comments
 (0)