Skip to content

Commit b089ce1

Browse files
committed
HHH-4309 Add tests to check overriding generators in subclasses works
1 parent 5564699 commit b089ce1

File tree

2 files changed

+160
-0
lines changed

2 files changed

+160
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.mapping.generated.override;
6+
7+
import jakarta.persistence.GeneratedValue;
8+
import jakarta.persistence.Id;
9+
import jakarta.persistence.MappedSuperclass;
10+
import org.hibernate.annotations.GenericGenerator;
11+
import org.hibernate.engine.spi.SessionFactoryImplementor;
12+
import org.hibernate.generator.Generator;
13+
import org.hibernate.id.UUIDGenerator;
14+
import org.hibernate.id.UUIDHexGenerator;
15+
import org.hibernate.persister.entity.EntityPersister;
16+
import org.hibernate.testing.orm.junit.DomainModel;
17+
import org.hibernate.testing.orm.junit.Jira;
18+
import org.hibernate.testing.orm.junit.SessionFactory;
19+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
20+
import org.junit.jupiter.api.Test;
21+
22+
import static org.assertj.core.api.Assertions.assertThat;
23+
24+
25+
@DomainModel(
26+
annotatedClasses = {
27+
GenericGeneratorOverrideTest.Entity1.class,
28+
GenericGeneratorOverrideTest.Entity2.class,
29+
}
30+
)
31+
@SessionFactory
32+
@Jira("https://hibernate.atlassian.net/browse/HHH-4309")
33+
public class GenericGeneratorOverrideTest {
34+
35+
@Test
36+
public void test(SessionFactoryScope scope) {
37+
SessionFactoryImplementor sf = scope.getSessionFactory();
38+
EntityPersister p1 = sf.getRuntimeMetamodels()
39+
.getMappingMetamodel()
40+
.getEntityDescriptor( Entity1.class.getName() );
41+
EntityPersister p2 = sf.getRuntimeMetamodels()
42+
.getMappingMetamodel()
43+
.getEntityDescriptor( Entity2.class.getName() );
44+
45+
Generator generator1 = p1.getGenerator();
46+
Generator generator2 = p2.getGenerator();
47+
assertThat( generator1 ).isInstanceOf( UUIDGenerator.class );
48+
assertThat( generator2 ).isInstanceOf( UUIDHexGenerator.class );
49+
}
50+
51+
@MappedSuperclass
52+
@GenericGenerator(name = "my-generator", strategy = "uuid2")
53+
public static abstract class BaseEntity {
54+
@Id
55+
@GeneratedValue(generator = "my-generator")
56+
private String id;
57+
58+
public String getId() {
59+
return id;
60+
}
61+
62+
public void setId(final String id) {
63+
this.id = id;
64+
}
65+
}
66+
67+
@jakarta.persistence.Entity(name = "Entity1")
68+
public static class Entity1 extends BaseEntity {
69+
public Entity1() {
70+
}
71+
}
72+
73+
@jakarta.persistence.Entity(name = "Entity2")
74+
@GenericGenerator(name = "my-generator", strategy = "uuid.hex")
75+
public static class Entity2 extends BaseEntity {
76+
public Entity2() {
77+
}
78+
}
79+
80+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.mapping.generated.override;
6+
7+
import jakarta.persistence.GeneratedValue;
8+
import jakarta.persistence.Id;
9+
import jakarta.persistence.MappedSuperclass;
10+
import jakarta.persistence.SequenceGenerator;
11+
import org.hibernate.engine.spi.SessionFactoryImplementor;
12+
import org.hibernate.id.enhanced.SequenceStyleGenerator;
13+
import org.hibernate.persister.entity.EntityPersister;
14+
import org.hibernate.testing.orm.junit.DomainModel;
15+
import org.hibernate.testing.orm.junit.Jira;
16+
import org.hibernate.testing.orm.junit.SessionFactory;
17+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
18+
import org.junit.jupiter.api.Test;
19+
20+
import static org.assertj.core.api.Assertions.assertThat;
21+
22+
23+
@DomainModel(
24+
annotatedClasses = {
25+
SequenceGeneratorOverrideTest.Entity1.class,
26+
SequenceGeneratorOverrideTest.Entity2.class,
27+
}
28+
)
29+
@SessionFactory
30+
@Jira("https://hibernate.atlassian.net/browse/HHH-4309")
31+
public class SequenceGeneratorOverrideTest {
32+
33+
@Test
34+
public void test(SessionFactoryScope scope) {
35+
SessionFactoryImplementor sf = scope.getSessionFactory();
36+
EntityPersister p1 = sf.getRuntimeMetamodels()
37+
.getMappingMetamodel()
38+
.getEntityDescriptor( Entity1.class.getName() );
39+
EntityPersister p2 = sf.getRuntimeMetamodels()
40+
.getMappingMetamodel()
41+
.getEntityDescriptor( Entity2.class.getName() );
42+
43+
SequenceStyleGenerator generator1 = (SequenceStyleGenerator) p1.getGenerator();
44+
SequenceStyleGenerator generator2 = (SequenceStyleGenerator) p2.getGenerator();
45+
assertThat( generator1.getDatabaseStructure().getPhysicalName().render() )
46+
.isEqualTo( "base_sequence" );
47+
assertThat( generator2.getDatabaseStructure().getPhysicalName().render() )
48+
.isEqualTo( "sub_sequence" );
49+
}
50+
51+
//tag::identifiers-generators-sequence-override-example[]
52+
@MappedSuperclass
53+
@SequenceGenerator(name = "my-generator", sequenceName = "base_sequence")
54+
public static abstract class BaseEntity {
55+
@Id
56+
@GeneratedValue(generator = "my-generator")
57+
private Long id;
58+
//end::identifiers-generators-sequence-override-example[]
59+
60+
public Long getId() {
61+
return id;
62+
}
63+
64+
public void setId(final Long id) {
65+
this.id = id;
66+
}
67+
//tag::identifiers-generators-sequence-override-example[]
68+
}
69+
70+
@jakarta.persistence.Entity(name = "Entity1")
71+
public static class Entity1 extends BaseEntity {
72+
}
73+
74+
@jakarta.persistence.Entity(name = "Entity2")
75+
@SequenceGenerator(name = "my-generator", sequenceName = "sub_sequence")
76+
public static class Entity2 extends BaseEntity {
77+
}
78+
//end::identifiers-generators-sequence-override-example[]
79+
80+
}

0 commit comments

Comments
 (0)