Skip to content

Commit e134c0a

Browse files
dreab8beikov
authored andcommitted
HHH-17049 Add test for issue
(cherry picked from commit 7486353)
1 parent 638b55f commit e134c0a

File tree

2 files changed

+579
-0
lines changed

2 files changed

+579
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,291 @@
1+
package org.hibernate.orm.test.bytecode.enhancement.lazy;
2+
3+
import java.util.List;
4+
5+
import org.hibernate.annotations.DynamicUpdate;
6+
import org.hibernate.orm.test.bytecode.enhancement.lazy.proxy.inlinedirtychecking.DirtyCheckEnhancementContext;
7+
8+
import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner;
9+
import org.hibernate.testing.bytecode.enhancement.CustomEnhancementContext;
10+
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
11+
import org.hibernate.testing.orm.junit.JiraKey;
12+
import org.junit.After;
13+
import org.junit.Before;
14+
import org.junit.Test;
15+
import org.junit.runner.RunWith;
16+
17+
import jakarta.persistence.CascadeType;
18+
import jakarta.persistence.Entity;
19+
import jakarta.persistence.FetchType;
20+
import jakarta.persistence.GeneratedValue;
21+
import jakarta.persistence.Id;
22+
import jakarta.persistence.OneToOne;
23+
24+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
25+
26+
@JiraKey("HHH-17049")
27+
@RunWith(BytecodeEnhancerRunner.class)
28+
@CustomEnhancementContext({ NoDirtyCheckingContext.class, DirtyCheckEnhancementContext.class })
29+
public class ConstructorInitializationAndDynamicUpdateTest extends BaseCoreFunctionalTestCase {
30+
31+
@Override
32+
protected Class<?>[] getAnnotatedClasses() {
33+
return new Class[] {
34+
Person.class,
35+
LoginAccount.class,
36+
AccountPreferences.class
37+
};
38+
}
39+
40+
@Before
41+
public void setUp() {
42+
inTransaction(
43+
session -> {
44+
Person person = new Person( 1l, "Henry" );
45+
LoginAccount loginAccount = new LoginAccount();
46+
loginAccount.setOwner( person );
47+
person.setLoginAccount( loginAccount );
48+
session.persist( person );
49+
}
50+
);
51+
52+
inTransaction(
53+
session -> {
54+
List<LoginAccount> accounts = session.createQuery(
55+
"select la from LoginAccount la",
56+
LoginAccount.class
57+
).list();
58+
assertThat( accounts.size() ).isEqualTo( 1 );
59+
60+
List<AccountPreferences> preferences = session.createQuery(
61+
"select ap from AccountPreferences ap",
62+
AccountPreferences.class
63+
).list();
64+
assertThat( preferences.size() ).isEqualTo( 1 );
65+
}
66+
);
67+
}
68+
69+
@After
70+
public void tearDown() {
71+
inTransaction(
72+
session -> {
73+
session.createMutationQuery( "delete from Person" ).executeUpdate();
74+
session.createMutationQuery( "delete from LoginAccount" ).executeUpdate();
75+
session.createMutationQuery( "delete from AccountPreferences" ).executeUpdate();
76+
}
77+
);
78+
}
79+
80+
@Test
81+
public void findTest() {
82+
inTransaction(
83+
session -> {
84+
Person person = session.find( Person.class, 1L );
85+
person.setFirstName( "Liza" );
86+
}
87+
);
88+
89+
inTransaction(
90+
session -> {
91+
List<LoginAccount> accounts = session.createQuery(
92+
"select la from LoginAccount la",
93+
LoginAccount.class
94+
).list();
95+
assertThat( accounts.size() ).isEqualTo( 1 );
96+
97+
List<AccountPreferences> preferences = session.createQuery(
98+
"select ap from AccountPreferences ap",
99+
AccountPreferences.class
100+
).list();
101+
assertThat( preferences.size() ).isEqualTo( 1 );
102+
}
103+
);
104+
}
105+
106+
@Test
107+
public void getReferenceTest() {
108+
inTransaction(
109+
session -> {
110+
Person person = session.getReference( Person.class, 1L );
111+
person.setFirstName( "Liza" );
112+
}
113+
);
114+
115+
inTransaction(
116+
session -> {
117+
List<LoginAccount> accounts = session.createQuery(
118+
"select la from LoginAccount la",
119+
LoginAccount.class
120+
).list();
121+
assertThat( accounts.size() ).isEqualTo( 1 );
122+
123+
List<AccountPreferences> preferences = session.createQuery(
124+
"select ap from AccountPreferences ap",
125+
AccountPreferences.class
126+
).list();
127+
assertThat( preferences.size() ).isEqualTo( 1 );
128+
}
129+
);
130+
}
131+
132+
@Test
133+
public void findTest2() {
134+
inTransaction(
135+
session -> {
136+
Person person = session.find( Person.class, 1L );
137+
person.setFirstName( "Liza" );
138+
139+
LoginAccount loginAccount = person.getLoginAccount();
140+
loginAccount.setName( "abc" );
141+
}
142+
);
143+
144+
inTransaction(
145+
session -> {
146+
Person person = session.find( Person.class, 1L );
147+
assertThat( person.getFirstName() ).isEqualTo( "Liza" );
148+
149+
LoginAccount loginAccount = person.getLoginAccount();
150+
assertThat( loginAccount ).isNotNull();
151+
assertThat( loginAccount.getName() ).isEqualTo( "abc" );
152+
153+
List<LoginAccount> accounts = session.createQuery(
154+
"select la from LoginAccount la",
155+
LoginAccount.class
156+
).list();
157+
assertThat( accounts.size() ).isEqualTo( 1 );
158+
159+
List<AccountPreferences> preferences = session.createQuery(
160+
"select ap from AccountPreferences ap",
161+
AccountPreferences.class
162+
).list();
163+
assertThat( preferences.size() ).isEqualTo( 1 );
164+
}
165+
);
166+
}
167+
168+
@Test
169+
public void getReferenceTest2() {
170+
inTransaction(
171+
session -> {
172+
Person person = session.getReference( Person.class, 1L );
173+
person.setFirstName( "Liza" );
174+
175+
LoginAccount loginAccount = person.getLoginAccount();
176+
loginAccount.setName( "abc" );
177+
}
178+
);
179+
180+
inTransaction(
181+
session -> {
182+
Person person = session.find( Person.class, 1L );
183+
assertThat( person.getFirstName() ).isEqualTo( "Liza" );
184+
185+
LoginAccount loginAccount = person.getLoginAccount();
186+
assertThat( loginAccount ).isNotNull();
187+
assertThat( loginAccount.getName() ).isEqualTo( "abc" );
188+
189+
List<LoginAccount> accounts = session.createQuery(
190+
"select la from LoginAccount la",
191+
LoginAccount.class
192+
).list();
193+
assertThat( accounts.size() ).isEqualTo( 1 );
194+
195+
List<AccountPreferences> preferences = session.createQuery(
196+
"select ap from AccountPreferences ap",
197+
AccountPreferences.class
198+
).list();
199+
assertThat( preferences.size() ).isEqualTo( 1 );
200+
}
201+
);
202+
}
203+
204+
@Entity(name = "Person")
205+
@DynamicUpdate
206+
public static class Person {
207+
@Id
208+
private long id;
209+
210+
private String firstName;
211+
212+
@OneToOne(orphanRemoval = true, cascade = { CascadeType.PERSIST, CascadeType.REMOVE }, fetch = FetchType.LAZY)
213+
private LoginAccount loginAccount = new LoginAccount();
214+
215+
public Person() {
216+
}
217+
218+
public Person(long id, String firstName) {
219+
this.id = id;
220+
this.firstName = firstName;
221+
}
222+
223+
public String getFirstName() {
224+
return firstName;
225+
}
226+
227+
public void setFirstName(String firstName) {
228+
this.firstName = firstName;
229+
}
230+
231+
public LoginAccount getLoginAccount() {
232+
return loginAccount;
233+
}
234+
235+
public void setLoginAccount(LoginAccount loginAccount) {
236+
this.loginAccount = loginAccount;
237+
}
238+
}
239+
240+
@Entity(name = "LoginAccount")
241+
@DynamicUpdate
242+
public static class LoginAccount {
243+
@Id
244+
@GeneratedValue
245+
private long id;
246+
247+
private String name;
248+
249+
@OneToOne(orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
250+
private AccountPreferences accountPreferences = new AccountPreferences();
251+
252+
@OneToOne(mappedBy = "loginAccount")
253+
private Person owner;
254+
255+
public String getName() {
256+
return name;
257+
}
258+
259+
public void setName(String name) {
260+
this.name = name;
261+
}
262+
263+
public AccountPreferences getAccountPreferences() {
264+
return accountPreferences;
265+
}
266+
267+
public void setAccountPreferences(AccountPreferences accountPreferences) {
268+
this.accountPreferences = accountPreferences;
269+
}
270+
271+
public Person getOwner() {
272+
return owner;
273+
}
274+
275+
public void setOwner(Person owner) {
276+
this.owner = owner;
277+
}
278+
}
279+
280+
@Entity(name = "AccountPreferences")
281+
@DynamicUpdate
282+
public static class AccountPreferences {
283+
@Id
284+
@GeneratedValue
285+
private long id;
286+
287+
private boolean open = false;
288+
}
289+
290+
291+
}

0 commit comments

Comments
 (0)