Skip to content

Commit 2b4003c

Browse files
committed
HHH-17947 Add additional test for unique key loading
1 parent 3f3181d commit 2b4003c

File tree

2 files changed

+228
-141
lines changed

2 files changed

+228
-141
lines changed
Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
5+
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
6+
*/
7+
package org.hibernate.orm.test.flush;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
import org.hibernate.annotations.NaturalId;
13+
14+
import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner;
15+
import org.hibernate.testing.bytecode.enhancement.EnhancementOptions;
16+
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
17+
import org.hibernate.testing.orm.junit.JiraKey;
18+
19+
import org.junit.After;
20+
import org.junit.Before;
21+
import org.junit.Test;
22+
import org.junit.runner.RunWith;
23+
24+
import jakarta.persistence.CascadeType;
25+
import jakarta.persistence.Column;
26+
import jakarta.persistence.Entity;
27+
import jakarta.persistence.FetchType;
28+
import jakarta.persistence.GeneratedValue;
29+
import jakarta.persistence.Id;
30+
import jakarta.persistence.JoinColumn;
31+
import jakarta.persistence.ManyToOne;
32+
import jakarta.persistence.OneToMany;
33+
import jakarta.persistence.OneToOne;
34+
35+
import static org.junit.jupiter.api.Assertions.assertEquals;
36+
37+
/**
38+
* @author Jan Schatteman
39+
*/
40+
@RunWith(BytecodeEnhancerRunner.class)
41+
@EnhancementOptions(biDirectionalAssociationManagement = true)
42+
@JiraKey(value = "HHH-17947")
43+
public class AutoFlushBeforeLoadTest extends BaseCoreFunctionalTestCase {
44+
45+
@Override
46+
protected Class[] getAnnotatedClasses() {
47+
return new Class[] {
48+
Person.class,
49+
Phone.class,
50+
DriversLicense.class
51+
};
52+
}
53+
54+
@Before
55+
public void setupData() {
56+
inTransaction(
57+
session -> {
58+
Person p = new Person( 1L, "John Doe" );
59+
session.persist( p );
60+
}
61+
);
62+
}
63+
64+
@After
65+
public void tearDown() {
66+
inTransaction(
67+
session -> {
68+
session.createMutationQuery( "delete from DriversLicense" ).executeUpdate();
69+
session.createMutationQuery( "delete from Phone" ).executeUpdate();
70+
session.createMutationQuery( "delete from Person" ).executeUpdate();
71+
}
72+
);
73+
}
74+
75+
@Test
76+
public void testCollectionInitialization() {
77+
inTransaction(
78+
session -> {
79+
Phone phone = new Phone( session.getReference( Person.class, 1L ), "1234567890" );
80+
session.persist( phone );
81+
Person person = session.createQuery( "select p from Person p", Person.class ).getSingleResult();
82+
assertEquals( 1, person.getPhones().size() );
83+
}
84+
);
85+
}
86+
87+
@Test
88+
public void testOneToOneInitialization() {
89+
inTransaction(
90+
session -> {
91+
DriversLicense driversLicense = new DriversLicense( 1L, session.getReference( Person.class, 1L ), "999" );
92+
session.persist( driversLicense );
93+
Person person = session.createQuery( "select p from Person p", Person.class ).getSingleResult();
94+
assertEquals( driversLicense, person.getDriversLicense() );
95+
session.clear();
96+
}
97+
);
98+
}
99+
100+
@Entity(name = "Person")
101+
public static class Person {
102+
103+
@Id
104+
private Long id;
105+
106+
@NaturalId
107+
private String name;
108+
109+
@OneToOne(mappedBy = "owner", fetch = FetchType.LAZY)
110+
private DriversLicense driversLicense;
111+
112+
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL)
113+
private List<Phone> phones = new ArrayList<>();
114+
115+
public Person() {
116+
}
117+
118+
public Person(Long id, String name) {
119+
this.id = id;
120+
this.name = name;
121+
}
122+
123+
public Long getId() {
124+
return id;
125+
}
126+
127+
public String getName() {
128+
return name;
129+
}
130+
131+
public List<Phone> getPhones() {
132+
return phones;
133+
}
134+
135+
public DriversLicense getDriversLicense() {
136+
return driversLicense;
137+
}
138+
139+
public void setDriversLicense(DriversLicense driversLicense) {
140+
this.driversLicense = driversLicense;
141+
}
142+
}
143+
144+
@Entity(name = "Phone")
145+
public static class Phone {
146+
147+
@Id
148+
@GeneratedValue
149+
private Long id;
150+
151+
@ManyToOne
152+
private Person person;
153+
154+
private String phoneNumber;
155+
156+
public Phone() {
157+
}
158+
159+
public Phone(Person person, String phoneNumber) {
160+
this.person = person;
161+
this.phoneNumber = phoneNumber;
162+
}
163+
164+
public Long getId() {
165+
return id;
166+
}
167+
168+
public String getPhoneNumber() {
169+
return phoneNumber;
170+
}
171+
172+
public Person getPerson() {
173+
return person;
174+
}
175+
176+
public void setPerson(Person person) {
177+
this.person = person;
178+
}
179+
}
180+
181+
182+
@Entity(name = "DriversLicense")
183+
public static class DriversLicense {
184+
185+
@Id
186+
private Long id;
187+
@OneToOne
188+
@JoinColumn(name = "owner_name", referencedColumnName = "name")
189+
private Person owner;
190+
@NaturalId
191+
@Column(name = "license_number")
192+
private String number;
193+
194+
public DriversLicense() {
195+
}
196+
197+
public DriversLicense(Long id, Person owner, String number) {
198+
this.id = id;
199+
this.owner = owner;
200+
this.number = number;
201+
}
202+
203+
public Long getId() {
204+
return id;
205+
}
206+
207+
public void setId(Long id) {
208+
this.id = id;
209+
}
210+
211+
public Person getOwner() {
212+
return owner;
213+
}
214+
215+
public void setOwner(Person owner) {
216+
this.owner = owner;
217+
}
218+
219+
public String getNumber() {
220+
return number;
221+
}
222+
223+
public void setNumber(String number) {
224+
this.number = number;
225+
}
226+
}
227+
228+
}

hibernate-core/src/test/java/org/hibernate/orm/test/flush/HHH10445Test.java

Lines changed: 0 additions & 141 deletions
This file was deleted.

0 commit comments

Comments
 (0)