Skip to content

Commit f26d77c

Browse files
committed
HHH-18608 Add test for issue
1 parent 9071c16 commit f26d77c

File tree

1 file changed

+202
-0
lines changed

1 file changed

+202
-0
lines changed
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
package org.hibernate.orm.test.bytecode.enhancement.batch;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import org.hibernate.Hibernate;
7+
import org.hibernate.annotations.BatchSize;
8+
import org.hibernate.cfg.AvailableSettings;
9+
10+
import org.hibernate.testing.bytecode.enhancement.extension.BytecodeEnhanced;
11+
import org.hibernate.testing.orm.junit.DomainModel;
12+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
13+
import org.hibernate.testing.orm.junit.JiraKey;
14+
import org.hibernate.testing.orm.junit.Jpa;
15+
import org.hibernate.testing.orm.junit.ServiceRegistry;
16+
import org.hibernate.testing.orm.junit.SessionFactory;
17+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
18+
import org.hibernate.testing.orm.junit.Setting;
19+
import org.junit.jupiter.api.AfterEach;
20+
import org.junit.jupiter.api.BeforeEach;
21+
import org.junit.jupiter.api.Test;
22+
23+
import jakarta.persistence.CascadeType;
24+
import jakarta.persistence.Column;
25+
import jakarta.persistence.Entity;
26+
import jakarta.persistence.FetchType;
27+
import jakarta.persistence.GeneratedValue;
28+
import jakarta.persistence.Id;
29+
import jakarta.persistence.JoinColumn;
30+
import jakarta.persistence.ManyToOne;
31+
import jakarta.persistence.OneToMany;
32+
import jakarta.persistence.OneToOne;
33+
import jakarta.persistence.Table;
34+
35+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
36+
37+
@DomainModel(
38+
annotatedClasses = {
39+
RefreshAndBatchTest.User.class,
40+
RefreshAndBatchTest.UserInfo.class,
41+
RefreshAndBatchTest.Phone.class,
42+
}
43+
44+
)
45+
@SessionFactory
46+
@ServiceRegistry(
47+
settings = {
48+
@Setting(name = AvailableSettings.DEFAULT_BATCH_FETCH_SIZE, value = "100")
49+
50+
}
51+
)
52+
@JiraKey("HHH-18608")
53+
@BytecodeEnhanced(runNotEnhancedAsWell = true)
54+
public class RefreshAndBatchTest {
55+
56+
@BeforeEach
57+
public void setUp(SessionFactoryScope scope) {
58+
scope.inTransaction(
59+
session -> {
60+
UserInfo info = new UserInfo( "info" );
61+
Phone phone = new Phone( "123456" );
62+
info.addPhone( phone );
63+
User user = new User( 1l, "user1", info );
64+
session.persist( user );
65+
}
66+
);
67+
}
68+
69+
@AfterEach
70+
public void tearDown(SessionFactoryScope scope) {
71+
scope.inTransaction(
72+
session -> {
73+
session.createQuery( "delete User" ).executeUpdate();
74+
session.createQuery( "delete Phone" ).executeUpdate();
75+
session.createQuery( "delete UserInfo" ).executeUpdate();
76+
}
77+
);
78+
}
79+
80+
@Test
81+
public void testRefresh(SessionFactoryScope scope) {
82+
scope.inTransaction(
83+
session -> {
84+
User user = session.createQuery( "select u from User u where u.id = :id", User.class )
85+
.setParameter( "id", 1l )
86+
.getSingleResult();
87+
assertThat( Hibernate.isInitialized( user.getInfo() ) ).isFalse();
88+
session.refresh( user.getInfo() );
89+
assertThat( Hibernate.isInitialized( user.getInfo() ) ).isTrue();
90+
}
91+
);
92+
}
93+
94+
@Entity(name = "User")
95+
@Table(name = "USER_TABLE")
96+
@BatchSize(size = 5)
97+
public static class User {
98+
99+
@Id
100+
private Long id;
101+
102+
@Column
103+
private String name;
104+
105+
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
106+
@JoinColumn(name = "INFO_ID", referencedColumnName = "ID")
107+
private UserInfo info;
108+
109+
public User() {
110+
}
111+
112+
public User(long id, String name, UserInfo info) {
113+
this.id = id;
114+
this.name = name;
115+
this.info = info;
116+
info.user = this;
117+
}
118+
119+
public long getId() {
120+
return id;
121+
}
122+
123+
public String getName() {
124+
return name;
125+
}
126+
127+
public UserInfo getInfo() {
128+
return info;
129+
}
130+
}
131+
132+
@Entity(name = "UserInfo")
133+
public static class UserInfo {
134+
@Id
135+
@GeneratedValue
136+
private Long id;
137+
138+
@OneToOne(mappedBy = "info", fetch = FetchType.LAZY)
139+
private User user;
140+
141+
private String info;
142+
143+
@OneToMany(mappedBy = "info", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
144+
private List<Phone> phoneList;
145+
146+
public long getId() {
147+
return id;
148+
}
149+
150+
public UserInfo() {
151+
}
152+
153+
public UserInfo(String info) {
154+
this.info = info;
155+
}
156+
157+
public User getUser() {
158+
return user;
159+
}
160+
161+
public String getInfo() {
162+
return info;
163+
}
164+
165+
public List<Phone> getPhoneList() {
166+
return phoneList;
167+
}
168+
169+
public void addPhone(Phone phone) {
170+
if ( phoneList == null ) {
171+
phoneList = new ArrayList<>();
172+
}
173+
this.phoneList.add( phone );
174+
phone.info = this;
175+
}
176+
}
177+
178+
@Entity(name = "Phone")
179+
public static class Phone {
180+
@Id
181+
private String number;
182+
183+
@ManyToOne
184+
@JoinColumn(name = "INFO_ID")
185+
private UserInfo info;
186+
187+
public Phone() {
188+
}
189+
190+
public Phone(String number) {
191+
this.number = number;
192+
}
193+
194+
public String getNumber() {
195+
return number;
196+
}
197+
198+
public UserInfo getInfo() {
199+
return info;
200+
}
201+
}
202+
}

0 commit comments

Comments
 (0)