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