Skip to content

Commit 6d0c959

Browse files
committed
HHH-18524 Add test for issue
1 parent a87e08b commit 6d0c959

File tree

1 file changed

+270
-0
lines changed

1 file changed

+270
-0
lines changed
Lines changed: 270 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,270 @@
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.mapping.identifier;
8+
9+
import java.util.UUID;
10+
11+
import org.hibernate.annotations.UuidGenerator;
12+
13+
import org.hibernate.testing.orm.junit.DomainModel;
14+
import org.hibernate.testing.orm.junit.Jira;
15+
import org.hibernate.testing.orm.junit.SessionFactory;
16+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
17+
import org.junit.jupiter.api.AfterAll;
18+
import org.junit.jupiter.api.Test;
19+
20+
import jakarta.persistence.Embeddable;
21+
import jakarta.persistence.EmbeddedId;
22+
import jakarta.persistence.Entity;
23+
import jakarta.persistence.GeneratedValue;
24+
import jakarta.persistence.Id;
25+
import jakarta.persistence.IdClass;
26+
27+
import static org.assertj.core.api.Assertions.assertThat;
28+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
29+
30+
/**
31+
* @author Marco Belladelli
32+
*/
33+
@DomainModel( annotatedClasses = {
34+
CompositeIdGenerationTypeTest.SingleIdClass.class,
35+
CompositeIdGenerationTypeTest.MultipleIdClass.class,
36+
CompositeIdGenerationTypeTest.IdClassPK.class,
37+
CompositeIdGenerationTypeTest.SingleEmbeddedId.class,
38+
CompositeIdGenerationTypeTest.SingleEmbeddedPK.class,
39+
CompositeIdGenerationTypeTest.MultipleEmbeddedId.class,
40+
CompositeIdGenerationTypeTest.MultipleEmbeddedPK.class,
41+
} )
42+
@SessionFactory
43+
@Jira( "https://hibernate.atlassian.net/browse/HHH-18524" )
44+
public class CompositeIdGenerationTypeTest {
45+
@Test
46+
public void testSingleIdClass(SessionFactoryScope scope) {
47+
scope.inTransaction( session -> session.persist( new SingleIdClass( 1L, "id_class_1" ) ) );
48+
scope.inSession( session -> {
49+
final SingleIdClass result = session.createQuery( "from SingleIdClass", SingleIdClass.class )
50+
.getSingleResult();
51+
assertThat( result.getId() ).isEqualTo( 1L );
52+
assertDoesNotThrow( () -> UUID.fromString( result.getUuid() ) );
53+
} );
54+
}
55+
56+
@Test
57+
public void testMultipleIdClass(SessionFactoryScope scope) {
58+
scope.inTransaction( session -> session.persist( new MultipleIdClass( "id_class_2" ) ) );
59+
scope.inSession( session -> {
60+
final MultipleIdClass result = session.createQuery( "from MultipleIdClass", MultipleIdClass.class )
61+
.getSingleResult();
62+
assertThat( result.getId() ).isGreaterThan( 0 );
63+
assertDoesNotThrow( () -> UUID.fromString( result.getUuid() ) );
64+
} );
65+
}
66+
67+
@Test
68+
public void testSingleEmbeddedId(SessionFactoryScope scope) {
69+
scope.inTransaction( session -> session.persist( new SingleEmbeddedId(
70+
new SingleEmbeddedPK( 1L ),
71+
"embedded_id_1"
72+
) ) );
73+
scope.inSession( session -> {
74+
final SingleEmbeddedId result = session.createQuery( "from SingleEmbeddedId", SingleEmbeddedId.class )
75+
.getSingleResult();
76+
final SingleEmbeddedPK embeddedId = result.getEmbeddedId();
77+
assertThat( embeddedId.getId() ).isEqualTo( 1L );
78+
assertDoesNotThrow( () -> UUID.fromString( embeddedId.getUuid() ) );
79+
} );
80+
}
81+
82+
@Test
83+
public void testMultipleEmbeddedId(SessionFactoryScope scope) {
84+
scope.inTransaction( session -> session.persist( new MultipleEmbeddedId(
85+
new MultipleEmbeddedPK(),
86+
"embedded_id_2"
87+
) ) );
88+
89+
scope.inTransaction( session -> {
90+
final MultipleEmbeddedId result = session.createQuery( "from MultipleEmbeddedId", MultipleEmbeddedId.class )
91+
.getSingleResult();
92+
final MultipleEmbeddedPK embeddedId = result.getEmbeddedId();
93+
assertThat( embeddedId.getId() ).isGreaterThan( 0 );
94+
assertDoesNotThrow( () -> UUID.fromString( embeddedId.getUuid() ) );
95+
} );
96+
}
97+
98+
@AfterAll
99+
public void tearDown(SessionFactoryScope scope) {
100+
scope.getSessionFactory().getSchemaManager().truncateMappedObjects();
101+
}
102+
103+
@Entity( name = "SingleIdClass" )
104+
@IdClass( IdClassPK.class )
105+
static class SingleIdClass {
106+
@Id
107+
private Long id;
108+
109+
@Id
110+
@UuidGenerator
111+
private String uuid;
112+
113+
private String name;
114+
115+
public SingleIdClass() {
116+
}
117+
118+
public SingleIdClass(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 getUuid() {
128+
return uuid;
129+
}
130+
131+
public String getName() {
132+
return name;
133+
}
134+
}
135+
136+
@Embeddable
137+
static class IdClassPK {
138+
private Long id;
139+
private String uuid;
140+
141+
public IdClassPK() {
142+
}
143+
144+
public IdClassPK(Long id, String uuid) {
145+
this.id = id;
146+
this.uuid = uuid;
147+
}
148+
}
149+
150+
@Entity( name = "MultipleIdClass" )
151+
@IdClass( IdClassPK.class )
152+
static class MultipleIdClass {
153+
@Id
154+
@GeneratedValue
155+
private Long id;
156+
157+
@Id
158+
@UuidGenerator
159+
private String uuid;
160+
161+
private String name;
162+
163+
public MultipleIdClass() {
164+
}
165+
166+
public MultipleIdClass(String name) {
167+
this.name = name;
168+
}
169+
170+
public Long getId() {
171+
return id;
172+
}
173+
174+
public String getUuid() {
175+
return uuid;
176+
}
177+
178+
public String getName() {
179+
return name;
180+
}
181+
}
182+
183+
@Entity( name = "SingleEmbeddedId" )
184+
static class SingleEmbeddedId {
185+
@EmbeddedId
186+
private SingleEmbeddedPK embeddedId;
187+
188+
private String name;
189+
190+
public SingleEmbeddedId() {
191+
}
192+
193+
public SingleEmbeddedId(SingleEmbeddedPK embeddedId, String name) {
194+
this.embeddedId = embeddedId;
195+
this.name = name;
196+
}
197+
198+
public SingleEmbeddedPK getEmbeddedId() {
199+
return embeddedId;
200+
}
201+
202+
public String getName() {
203+
return name;
204+
}
205+
}
206+
207+
@Embeddable
208+
static class SingleEmbeddedPK {
209+
private Long id;
210+
211+
@UuidGenerator
212+
private String uuid;
213+
214+
public SingleEmbeddedPK() {
215+
}
216+
217+
public SingleEmbeddedPK(Long id) {
218+
this.id = id;
219+
}
220+
221+
public Long getId() {
222+
return id;
223+
}
224+
225+
public String getUuid() {
226+
return uuid;
227+
}
228+
}
229+
230+
@Entity( name = "MultipleEmbeddedId" )
231+
static class MultipleEmbeddedId {
232+
@EmbeddedId
233+
private MultipleEmbeddedPK embeddedId;
234+
235+
private String name;
236+
237+
public MultipleEmbeddedId() {
238+
}
239+
240+
public MultipleEmbeddedId(MultipleEmbeddedPK embeddedId, String name) {
241+
this.embeddedId = embeddedId;
242+
this.name = name;
243+
}
244+
245+
public MultipleEmbeddedPK getEmbeddedId() {
246+
return embeddedId;
247+
}
248+
249+
public String getName() {
250+
return name;
251+
}
252+
}
253+
254+
@Embeddable
255+
static class MultipleEmbeddedPK {
256+
@GeneratedValue
257+
private Long id;
258+
259+
@UuidGenerator
260+
private String uuid;
261+
262+
public Long getId() {
263+
return id;
264+
}
265+
266+
public String getUuid() {
267+
return uuid;
268+
}
269+
}
270+
}

0 commit comments

Comments
 (0)