1
+ package org .hibernate .orm .test .records ;
2
+
3
+ import jakarta .persistence .CascadeType ;
4
+ import jakarta .persistence .Column ;
5
+ import jakarta .persistence .Embeddable ;
6
+ import jakarta .persistence .EmbeddedId ;
7
+ import jakarta .persistence .Entity ;
8
+ import jakarta .persistence .FetchType ;
9
+ import jakarta .persistence .GeneratedValue ;
10
+ import jakarta .persistence .GenerationType ;
11
+ import jakarta .persistence .Id ;
12
+ import jakarta .persistence .JoinColumn ;
13
+ import jakarta .persistence .ManyToOne ;
14
+ import jakarta .persistence .OneToMany ;
15
+ import jakarta .persistence .SequenceGenerator ;
16
+ import org .hibernate .testing .orm .junit .DomainModel ;
17
+ import org .hibernate .testing .orm .junit .SessionFactory ;
18
+ import org .hibernate .testing .orm .junit .SessionFactoryScope ;
19
+ import org .junit .jupiter .api .Test ;
20
+
21
+ import java .util .Collection ;
22
+ import java .util .Collections ;
23
+
24
+ import static org .junit .jupiter .api .Assertions .assertNotNull ;
25
+
26
+ @ SessionFactory
27
+ @ DomainModel (annotatedClasses = {GenericEnbeddedIdRecordTest .MainEntity .class , GenericEnbeddedIdRecordTest .ReferencedEntity .class })
28
+ class GenericEnbeddedIdRecordTest {
29
+
30
+ @ Test
31
+ void testOverrideJoinColumn (SessionFactoryScope scope ) {
32
+ scope .inTransaction (entityManager -> {
33
+ MainEntity mainEntity = new MainEntity ();
34
+ ReferencedEntity referencedEntity = new ReferencedEntity ();
35
+ mainEntity .id = new GenericEmbeddedId <>(referencedEntity );
36
+ referencedEntity .entities = Collections .singleton (mainEntity );
37
+ entityManager .persist (referencedEntity );
38
+ assertNotNull (mainEntity );
39
+ });
40
+ }
41
+
42
+ @ Embeddable
43
+ public record GenericEmbeddedId <T >(@ ManyToOne (fetch = FetchType .EAGER )
44
+ @ JoinColumn (name = "REFERENCED_ENTITY_ID" )
45
+ T referencedEntity ) {
46
+ }
47
+
48
+ @ Entity
49
+ public static class MainEntity {
50
+
51
+ @ EmbeddedId
52
+ private GenericEmbeddedId <ReferencedEntity > id ;
53
+
54
+ @ Column (name = "DESCRIPTION" )
55
+ private String description ;
56
+
57
+ }
58
+
59
+ @ Entity
60
+ public static class ReferencedEntity {
61
+
62
+ @ Id
63
+ @ GeneratedValue (strategy = GenerationType .SEQUENCE ,
64
+ generator = "REFERENCED_ENTITY_ID_GEN" )
65
+ @ SequenceGenerator (name = "REFERENCED_ENTITY_ID_GEN" )
66
+ @ Column (name = "REFERENCED_ENTITY_ID" )
67
+ private Long id ;
68
+
69
+ @ OneToMany (mappedBy = "id.referencedEntity" , cascade = CascadeType .ALL )
70
+ private Collection <MainEntity > entities ;
71
+
72
+ }
73
+ }
0 commit comments