Skip to content

Commit dd3be96

Browse files
committed
HHH-17612 Add test for issue
1 parent c5db0d3 commit dd3be96

File tree

1 file changed

+130
-0
lines changed

1 file changed

+130
-0
lines changed
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
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.envers.integration.metamodel;
6+
7+
import jakarta.persistence.Column;
8+
import jakarta.persistence.Entity;
9+
import jakarta.persistence.Id;
10+
import jakarta.persistence.metamodel.EntityType;
11+
import org.hibernate.annotations.CreationTimestamp;
12+
import org.hibernate.boot.MetadataSources;
13+
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
14+
import org.hibernate.engine.spi.SessionFactoryImplementor;
15+
import org.hibernate.envers.Audited;
16+
import org.hibernate.envers.DefaultRevisionEntity_;
17+
import org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity_;
18+
import org.hibernate.envers.configuration.EnversSettings;
19+
import org.hibernate.envers.enhanced.SequenceIdRevisionEntity_;
20+
import org.hibernate.envers.enhanced.SequenceIdTrackingModifiedEntitiesRevisionEntity_;
21+
import org.hibernate.internal.CoreMessageLogger;
22+
import org.hibernate.metamodel.internal.MetadataContext;
23+
import org.hibernate.testing.logger.LogInspectionHelper;
24+
import org.hibernate.testing.logger.TriggerOnPrefixLogListener;
25+
import org.hibernate.testing.orm.junit.Jira;
26+
import org.hibernate.testing.util.ServiceRegistryUtil;
27+
import org.jboss.logging.Logger;
28+
import org.junit.jupiter.api.BeforeAll;
29+
import org.junit.jupiter.api.Test;
30+
import org.junit.jupiter.api.TestInstance;
31+
32+
import java.lang.invoke.MethodHandles;
33+
import java.time.Instant;
34+
35+
import static org.assertj.core.api.Assertions.assertThat;
36+
import static org.hibernate.testing.transaction.TransactionUtil2.inTransaction;
37+
38+
/**
39+
* @author Marco Belladelli
40+
*/
41+
@Jira( "https://hibernate.atlassian.net/browse/HHH-17612" )
42+
@TestInstance( TestInstance.Lifecycle.PER_CLASS )
43+
public class RevisionEntitiesMetamodelTest {
44+
private TriggerOnPrefixLogListener trigger;
45+
46+
@BeforeAll
47+
public void setUp() {
48+
trigger = new TriggerOnPrefixLogListener( "HHH015007: Illegal argument on static metamodel field injection" );
49+
LogInspectionHelper.registerListener(
50+
trigger,
51+
Logger.getMessageLogger(
52+
MethodHandles.lookup(),
53+
CoreMessageLogger.class,
54+
MetadataContext.class.getName()
55+
)
56+
);
57+
}
58+
59+
@Test
60+
public void testDefaultRevisionEntity() {
61+
try (final SessionFactoryImplementor sf = buildSessionFactory( false, true )) {
62+
assertThat( trigger.wasTriggered() ).isFalse();
63+
inTransaction( sf, session -> {
64+
assertThat( DefaultRevisionEntity_.class_ ).isNotNull();
65+
assertThat( DefaultRevisionEntity_.class_ ).isInstanceOf( EntityType.class );
66+
} );
67+
}
68+
}
69+
70+
@Test
71+
public void testSequenceIdRevisionEntity() {
72+
try (final SessionFactoryImplementor sf = buildSessionFactory( false, false )) {
73+
assertThat( trigger.wasTriggered() ).isFalse();
74+
inTransaction( sf, session -> {
75+
assertThat( SequenceIdRevisionEntity_.class_ ).isNotNull();
76+
assertThat( SequenceIdRevisionEntity_.class_ ).isInstanceOf( EntityType.class );
77+
} );
78+
}
79+
}
80+
81+
@Test
82+
public void testDefaultTrackingModifiedEntitiesRevisionEntity() {
83+
try (final SessionFactoryImplementor sf = buildSessionFactory( true, true )) {
84+
assertThat( trigger.wasTriggered() ).isFalse();
85+
inTransaction( sf, session -> {
86+
assertThat( DefaultTrackingModifiedEntitiesRevisionEntity_.class_ ).isNotNull();
87+
assertThat( DefaultTrackingModifiedEntitiesRevisionEntity_.class_ ).isInstanceOf( EntityType.class );
88+
} );
89+
}
90+
}
91+
92+
@Test
93+
public void testSequenceIdTrackingModifiedEntitiesRevisionEntity() {
94+
try (final SessionFactoryImplementor sf = buildSessionFactory( true, false )) {
95+
assertThat( trigger.wasTriggered() ).isFalse();
96+
inTransaction( sf, session -> {
97+
assertThat( SequenceIdTrackingModifiedEntitiesRevisionEntity_.class_ ).isNotNull();
98+
assertThat( SequenceIdTrackingModifiedEntitiesRevisionEntity_.class_ ).isInstanceOf( EntityType.class );
99+
} );
100+
}
101+
}
102+
103+
@SuppressWarnings( "resource" )
104+
private static SessionFactoryImplementor buildSessionFactory(boolean trackEntities, boolean nativeId) {
105+
final StandardServiceRegistryBuilder registryBuilder = ServiceRegistryUtil.serviceRegistryBuilder();
106+
registryBuilder.applySetting( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, trackEntities );
107+
registryBuilder.applySetting( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, nativeId );
108+
return new MetadataSources( registryBuilder.build() )
109+
.addAnnotatedClasses( Customer.class )
110+
.buildMetadata()
111+
.buildSessionFactory()
112+
.unwrap( SessionFactoryImplementor.class );
113+
}
114+
115+
@Audited
116+
@Entity( name = "Customer" )
117+
@SuppressWarnings( "unused" )
118+
public static class Customer {
119+
@Id
120+
private Long id;
121+
122+
private String firstName;
123+
124+
private String lastName;
125+
126+
@Column( name = "created_on" )
127+
@CreationTimestamp
128+
private Instant createdOn;
129+
}
130+
}

0 commit comments

Comments
 (0)