Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions hibernate-envers/hibernate-envers.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ dependencies {
compileOnly jakartaLibs.annotation

testImplementation project( ':hibernate-testing' )

testAnnotationProcessor project( ':hibernate-processor' )
}

test {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,9 @@
*/
package org.hibernate.envers;

import jakarta.persistence.Entity;

/**
* @author Adam Warski (adam at warski dot org)
* @author Chris Cranford
*/
@Entity
public final class DefaultRevisionEntity extends RevisionMapping {
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,12 @@
*/
package org.hibernate.envers;

import jakarta.persistence.Entity;

/**
* Extension of standard {@link DefaultRevisionEntity} that allows tracking entity names changed in each revision.
* This revision entity is implicitly used when {@code org.hibernate.envers.track_entities_changed_in_revision}
* parameter is set to {@code true}.
*
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
*/
@Entity
public final class DefaultTrackingModifiedEntitiesRevisionEntity extends TrackingModifiedEntitiesRevisionMapping {
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,10 @@
*/
package org.hibernate.envers.enhanced;

import jakarta.persistence.Entity;

/**
* @author Adam Warski (adam at warski dot org)
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
* @author Chris Cranford
*/
@Entity
public final class SequenceIdRevisionEntity extends SequenceIdRevisionMapping {
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,12 @@
*/
package org.hibernate.envers.enhanced;

import jakarta.persistence.Entity;

/**
* Extension of standard {@link SequenceIdRevisionEntity} that allows tracking entity names changed in each revision.
* This revision entity is implicitly used when {@code org.hibernate.envers.track_entities_changed_in_revision}
* parameter is set to {@code true}.
*
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
*/
@Entity
public final class SequenceIdTrackingModifiedEntitiesRevisionEntity extends SequenceIdTrackingModifiedEntitiesRevisionMapping {
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* SPDX-License-Identifier: Apache-2.0
* Copyright Red Hat Inc. and Hibernate Authors
*/
package org.hibernate.orm.test.envers.integration.metamodel;

import jakarta.persistence.Entity;
import org.hibernate.envers.RevisionEntity;
import org.hibernate.envers.RevisionMapping;

@Entity(name = "CustomRevisionEntity")
@RevisionEntity
class CustomRevisionEntity extends RevisionMapping {
private String username;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,21 @@
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.envers.Audited;
import org.hibernate.envers.RevisionMapping_;
import org.hibernate.envers.TrackingModifiedEntitiesRevisionMapping_;
import org.hibernate.envers.configuration.EnversSettings;
import org.hibernate.envers.enhanced.SequenceIdRevisionMapping_;
import org.hibernate.envers.enhanced.SequenceIdTrackingModifiedEntitiesRevisionMapping_;
import org.hibernate.internal.CoreMessageLogger;
import org.hibernate.metamodel.internal.MetadataContext;
import org.hibernate.testing.logger.LogInspectionHelper;
import org.hibernate.testing.logger.TriggerOnPrefixLogListener;
import org.hibernate.testing.orm.junit.Jira;
import org.hibernate.testing.util.ServiceRegistryUtil;
import org.jboss.logging.Logger;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;

Expand All @@ -32,76 +38,112 @@
/**
* @author Marco Belladelli
*/
@Jira( "https://hibernate.atlassian.net/browse/HHH-17612" )
@TestInstance( TestInstance.Lifecycle.PER_CLASS )
@Jira("https://hibernate.atlassian.net/browse/HHH-17612")
@Jira("https://hibernate.atlassian.net/browse/HHH-19258")
@Jira("https://hibernate.atlassian.net/browse/HHH-10068")
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class RevisionEntitiesMetamodelTest {
private TriggerOnPrefixLogListener trigger;
private CoreMessageLogger logger;
private TriggerOnPrefixLogListener t1;
private TriggerOnPrefixLogListener t2;

@BeforeAll
public void setUp() {
trigger = new TriggerOnPrefixLogListener( "HHH015007: Illegal argument on static metamodel field injection" );
LogInspectionHelper.registerListener(
trigger,
Logger.getMessageLogger(
MethodHandles.lookup(),
CoreMessageLogger.class,
MetadataContext.class.getName()
)
logger = Logger.getMessageLogger(
MethodHandles.lookup(),
CoreMessageLogger.class,
MetadataContext.class.getName()
);
// HHH-17612 - Injecting the class_ type field fails
t1 = new TriggerOnPrefixLogListener( "HHH015007: Illegal argument on static metamodel field injection" );
LogInspectionHelper.registerListener( t1, logger );
// HHH-19259 - Injecting the actual attributes fails
t2 = new TriggerOnPrefixLogListener( "HHH015011: Unable to locate static metamodel field" );
LogInspectionHelper.registerListener( t2, logger );
}

@BeforeEach
public void clear() {
t1.reset();
t2.reset();
}

@AfterAll
public void tearDown() {
LogInspectionHelper.clearAllListeners( logger );
}

@Test
public void testDefaultRevisionEntity() {
try (final SessionFactoryImplementor ignored = buildSessionFactory( false, true )) {
assertThat( trigger.wasTriggered() ).isFalse();
try (final SessionFactoryImplementor ignored = buildSessionFactory( false, true, Customer.class )) {
assertListeners();
assertThat( RevisionMapping_.class ).isNotNull();
}
}

@Test
public void testSequenceIdRevisionEntity() {
try (final SessionFactoryImplementor ignored = buildSessionFactory( false, false )) {
assertThat( trigger.wasTriggered() ).isFalse();
try (final SessionFactoryImplementor ignored = buildSessionFactory( false, false, Customer.class )) {
assertListeners();
assertThat( SequenceIdRevisionMapping_.class ).isNotNull();
}
}

@Test
public void testDefaultTrackingModifiedEntitiesRevisionEntity() {
try (final SessionFactoryImplementor ignored = buildSessionFactory( true, true )) {
assertThat( trigger.wasTriggered() ).isFalse();
try (final SessionFactoryImplementor ignored = buildSessionFactory( true, true, Customer.class )) {
assertListeners();
assertThat( TrackingModifiedEntitiesRevisionMapping_.class ).isNotNull();
}
}

@Test
public void testSequenceIdTrackingModifiedEntitiesRevisionEntity() {
try (final SessionFactoryImplementor ignored = buildSessionFactory( true, false )) {
assertThat( trigger.wasTriggered() ).isFalse();
try (final SessionFactoryImplementor ignored = buildSessionFactory( true, false, Customer.class )) {
assertListeners();
assertListeners();
assertThat( SequenceIdTrackingModifiedEntitiesRevisionMapping_.class ).isNotNull().isNotNull();
}
}

@Test
public void testCustomRevisionEntity() {
try (final SessionFactoryImplementor ignored = buildSessionFactory( false, true, Customer.class,
CustomRevisionEntity.class )) {
assertListeners();
assertThat( CustomRevisionEntity_.class ).isNotNull();
}
}

@SuppressWarnings( "resource" )
private static SessionFactoryImplementor buildSessionFactory(boolean trackEntities, boolean nativeId) {
@SuppressWarnings("resource")
private static SessionFactoryImplementor buildSessionFactory(boolean trackEntities, boolean nativeId, Class<?>... classes) {
final StandardServiceRegistryBuilder registryBuilder = ServiceRegistryUtil.serviceRegistryBuilder();
registryBuilder.applySetting( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, trackEntities );
registryBuilder.applySetting( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, nativeId );
return new MetadataSources( registryBuilder.build() )
.addAnnotatedClasses( Customer.class )
.addAnnotatedClasses( classes )
.buildMetadata()
.buildSessionFactory()
.unwrap( SessionFactoryImplementor.class );
}

private void assertListeners() {
assertThat( t1.wasTriggered() ).as( "HHH015007 was triggered" ).isFalse();
assertThat( t2.wasTriggered() ).as( "HHH015011 was triggered" ).isFalse();
}

@Audited
@Entity( name = "Customer" )
@SuppressWarnings( "unused" )
public static class Customer {
@Entity(name = "Customer")
@SuppressWarnings("unused")
static class Customer {
@Id
private Long id;

private String firstName;

private String lastName;

@Column( name = "created_on" )
@Column(name = "created_on")
@CreationTimestamp
private Instant createdOn;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ public String toString() {

@Entity(name = "Design")
@Audited
private static class Design {
public static class Design {
@Id
private Integer id;

Expand Down
Loading