From 7507bd4ad13385fe90cb7d530760bdadfc36bdf5 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Tue, 11 Nov 2025 11:57:00 +0100 Subject: [PATCH 1/5] HHH-19921 Drop last JUnit 4 usages in Hibernate Envers --- ...ityTypeChangeAuditDefaultTrackingTest.java | 102 ++++------ .../envers/EntityTypeChangeAuditTest.java | 168 +++++++-------- ...angeAuditTrackingRevisionListenerTest.java | 192 ++++++++---------- .../accesstype/MixedAccessType.java | 61 ------ .../accesstype/MixedAccessTypeTest.java | 80 ++++++++ .../relation/ParentReferencingChildTest.java | 124 ++++++----- .../integration/query/StoreDeletedData.java | 131 ------------ .../query/StoreDeletedDataTest.java | 137 +++++++++++++ .../integrator/BasicIntegratorTest.java | 2 +- .../CharEnumerateValueTests.java | 29 +-- .../EvictAuditDataAfterCommitTest.java | 149 +++++++------- .../envers/various/ExportIdentifierTest.java | 31 +-- 12 files changed, 613 insertions(+), 593 deletions(-) delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessType.java create mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessTypeTest.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StoreDeletedData.java create mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StoreDeletedDataTest.java diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditDefaultTrackingTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditDefaultTrackingTest.java index e29c2eb427a0..42b2591c6148 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditDefaultTrackingTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditDefaultTrackingTest.java @@ -4,9 +4,6 @@ */ package org.hibernate.orm.test.envers; -import java.util.Arrays; -import java.util.Date; -import java.util.Map; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EntityManagerFactory; @@ -14,20 +11,20 @@ import jakarta.persistence.Table; import jakarta.persistence.Temporal; import jakarta.persistence.TemporalType; - import org.hibernate.annotations.CreationTimestamp; import org.hibernate.cfg.AvailableSettings; -import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.envers.Audited; -import org.hibernate.envers.TrackingModifiedEntitiesRevisionMapping; import org.hibernate.envers.RevisionEntity; +import org.hibernate.envers.TrackingModifiedEntitiesRevisionMapping; import org.hibernate.jpa.boot.spi.Bootstrap; - import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest; import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Date; +import java.util.Map; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; /** * @author Vlad Mihalcea @@ -37,64 +34,51 @@ public class EntityTypeChangeAuditDefaultTrackingTest extends EntityManagerFacto @Override protected Class[] getAnnotatedClasses() { return new Class[] { - Customer.class, - CustomTrackingRevisionEntity.class + Customer.class, + CustomTrackingRevisionEntity.class }; } @Test public void testLifecycle() { - final EntityManagerFactory testEmf = produceEntityManagerFactory(); - - TransactionUtil.doInJPA( () -> testEmf, entityManager -> { - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - - entityManager.persist(customer); - }); - - EntityManagerFactory entityManagerFactory = null; - try { - Map settings = buildSettings(); - settings.put( - AvailableSettings.LOADED_CLASSES, - Arrays.asList( - ApplicationCustomer.class, - CustomTrackingRevisionEntity.class - ) - ); - settings.put( - AvailableSettings.HBM2DDL_AUTO, - "update" - ); - entityManagerFactory = Bootstrap - .getEntityManagerFactoryBuilder( - new TestingPersistenceUnitDescriptorImpl(getClass().getSimpleName()), - settings) - .build() - .unwrap(SessionFactoryImplementor.class); - - final EntityManagerFactory emf = entityManagerFactory; - - doInJPA(() -> emf, entityManager -> { - ApplicationCustomer customer = new ApplicationCustomer(); - customer.setId(2L); - customer.setFirstName("John"); - customer.setLastName("Doe Jr."); - - entityManager.persist(customer); - }); - } - finally { - if ( entityManagerFactory != null ) { - entityManagerFactory.close(); + try (final EntityManagerFactory testEmf = produceEntityManagerFactory()) { + + TransactionUtil.doInJPA( () -> testEmf, entityManager -> { + Customer customer = new Customer(); + customer.setId( 1L ); + customer.setFirstName( "John" ); + customer.setLastName( "Doe" ); + + entityManager.persist( customer ); + } ); + + try (EntityManagerFactory entityManagerFactory = buildEntityManagerFactory()) { + entityManagerFactory.runInTransaction( entityManager -> { + ApplicationCustomer customer = new ApplicationCustomer(); + customer.setId( 2L ); + customer.setFirstName( "John" ); + customer.setLastName( "Doe Jr." ); + + entityManager.persist( customer ); + entityManager.getTransaction().commit(); + } ); } - testEmf.close(); } } + private EntityManagerFactory buildEntityManagerFactory() { + Map settings = buildSettings(); + settings.put( + AvailableSettings.LOADED_CLASSES, + Arrays.asList( ApplicationCustomer.class, CustomTrackingRevisionEntity.class ) + ); + settings.put( AvailableSettings.HBM2DDL_AUTO, "update" ); + return Bootstrap.getEntityManagerFactoryBuilder( + new TestingPersistenceUnitDescriptorImpl( getClass().getSimpleName() ), + settings ) + .build(); + } + @Audited @Entity(name = "Customer") public static class Customer { @@ -198,7 +182,7 @@ public void setCreatedOn(Date createdOn) { @Table(name = "TRACKING_REV_INFO") @RevisionEntity public static class CustomTrackingRevisionEntity - extends TrackingModifiedEntitiesRevisionMapping { + extends TrackingModifiedEntitiesRevisionMapping { } //end::envers-tracking-modified-entities-revchanges-example[] diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTest.java index e8455d304400..fd8ef835f28d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTest.java @@ -4,11 +4,6 @@ */ package org.hibernate.orm.test.envers; -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; @@ -19,22 +14,25 @@ import jakarta.persistence.Table; import jakarta.persistence.Temporal; import jakarta.persistence.TemporalType; - import org.hibernate.annotations.CreationTimestamp; import org.hibernate.cfg.AvailableSettings; -import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.envers.RevisionMapping; import org.hibernate.envers.ModifiedEntityNames; import org.hibernate.envers.RevisionEntity; +import org.hibernate.envers.RevisionMapping; import org.hibernate.jpa.boot.spi.Bootstrap; - import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Date; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; /** * @author Vlad Mihalcea @@ -44,86 +42,78 @@ public class EntityTypeChangeAuditTest extends EntityManagerFactoryBasedFunction @Override protected Class[] getAnnotatedClasses() { return new Class[] { - Customer.class, - CustomTrackingRevisionEntity.class + Customer.class, + CustomTrackingRevisionEntity.class }; } @Test public void test() { - final EntityManagerFactory testEmf = produceEntityManagerFactory(); - - doInJPA( () -> testEmf, entityManager -> { - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - - entityManager.persist(customer); - }); - - doInJPA( () -> testEmf, entityManager -> { - //tag::envers-tracking-modified-entities-queries-example1[] - assertEquals( - "org.hibernate.orm.test.envers.EntityTypeChangeAuditTest$Customer", - AuditReaderFactory - .get(entityManager) - .getCrossTypeRevisionChangesReader() - .findEntityTypes(1) - .iterator().next() - .getFirst() - ); - //end::envers-tracking-modified-entities-queries-example1[] - }); - - EntityManagerFactory entityManagerFactory = null; - try { - Map settings = buildSettings(); - settings.put( + try (final EntityManagerFactory testEmf = produceEntityManagerFactory()) { + + testEmf.runInTransaction( entityManager -> { + Customer customer = new Customer(); + customer.setId( 1L ); + customer.setFirstName( "John" ); + customer.setLastName( "Doe" ); + + entityManager.persist( customer ); + } ); + + testEmf.runInTransaction( entityManager -> { + //tag::envers-tracking-modified-entities-queries-example1[] + assertThat( + AuditReaderFactory + .get( entityManager ) + .getCrossTypeRevisionChangesReader() + .findEntityTypes( 1 ) + .iterator().next() + .getFirst() + ).isEqualTo( "org.hibernate.orm.test.envers.EntityTypeChangeAuditTest$Customer" ); + //end::envers-tracking-modified-entities-queries-example1[] + } ); + + try (EntityManagerFactory entityManagerFactory = buildEntityManagerFactory()) { + final EntityManagerFactory emf = entityManagerFactory; + + entityManagerFactory.runInTransaction( entityManager -> { + ApplicationCustomer customer = entityManager.find( ApplicationCustomer.class, 1L ); + customer.setLastName( "Doe Jr." ); + } ); + + entityManagerFactory.runInTransaction( entityManager -> { + //tag::envers-tracking-modified-entities-queries-example2[] + assertThat( + AuditReaderFactory + .get( entityManager ) + .getCrossTypeRevisionChangesReader() + .findEntityTypes( 2 ) + .iterator().next() + .getFirst() + ).isEqualTo( "org.hibernate.orm.test.envers.EntityTypeChangeAuditTest$ApplicationCustomer" ); + //end::envers-tracking-modified-entities-queries-example2[] + } ); + } + } + } + + private EntityManagerFactory buildEntityManagerFactory() { + Map settings = buildSettings(); + settings.put( AvailableSettings.LOADED_CLASSES, Arrays.asList( - ApplicationCustomer.class, - CustomTrackingRevisionEntity.class - ) - ); - settings.put( - AvailableSettings.HBM2DDL_AUTO, - "update" + ApplicationCustomer.class, + CustomTrackingRevisionEntity.class + ) ); - entityManagerFactory = Bootstrap.getEntityManagerFactoryBuilder( - new TestingPersistenceUnitDescriptorImpl(getClass().getSimpleName()), - settings - ).build().unwrap(SessionFactoryImplementor.class); - - final EntityManagerFactory emf = entityManagerFactory; - - doInJPA(() -> emf, entityManager -> { - ApplicationCustomer customer = entityManager.find(ApplicationCustomer.class, 1L); - customer.setLastName("Doe Jr."); - }); - - doInJPA(() -> emf, entityManager -> { - //tag::envers-tracking-modified-entities-queries-example2[] - assertEquals( - "org.hibernate.orm.test.envers.EntityTypeChangeAuditTest$ApplicationCustomer", - AuditReaderFactory - .get(entityManager) - .getCrossTypeRevisionChangesReader() - .findEntityTypes(2) - .iterator().next() - .getFirst() - ); - //end::envers-tracking-modified-entities-queries-example2[] - }); - } - finally { - if (entityManagerFactory != null) { - entityManagerFactory.close(); - } - testEmf.close(); - } + settings.put( AvailableSettings.HBM2DDL_AUTO, "update" ); + return Bootstrap.getEntityManagerFactoryBuilder( + new TestingPersistenceUnitDescriptorImpl( getClass().getSimpleName() ), + settings ) + .build(); } + //tag::envers-tracking-modified-entities-revchanges-before-rename-example[] @Audited @Entity(name = "Customer") @@ -142,7 +132,7 @@ public static class Customer { private Date createdOn; //Getters and setters are omitted for brevity - //end::envers-tracking-modified-entities-revchanges-before-rename-example[] + //end::envers-tracking-modified-entities-revchanges-before-rename-example[] public Long getId() { return id; @@ -175,7 +165,7 @@ public Date getCreatedOn() { public void setCreatedOn(Date createdOn) { this.createdOn = createdOn; } - //tag::envers-tracking-modified-entities-revchanges-before-rename-example[] + //tag::envers-tracking-modified-entities-revchanges-before-rename-example[] } //end::envers-tracking-modified-entities-revchanges-before-rename-example[] @@ -197,7 +187,7 @@ public static class ApplicationCustomer { private Date createdOn; //Getters and setters are omitted for brevity - //end::envers-tracking-modified-entities-revchanges-after-rename-example[] + //end::envers-tracking-modified-entities-revchanges-after-rename-example[] public Long getId() { return id; @@ -230,7 +220,7 @@ public Date getCreatedOn() { public void setCreatedOn(Date createdOn) { this.createdOn = createdOn; } - //tag::envers-tracking-modified-entities-revchanges-after-rename-example[] + //tag::envers-tracking-modified-entities-revchanges-after-rename-example[] } //end::envers-tracking-modified-entities-revchanges-after-rename-example[] @@ -242,9 +232,9 @@ public static class CustomTrackingRevisionEntity extends RevisionMapping { @ElementCollection @JoinTable( - name = "REVCHANGES", - joinColumns = @JoinColumn(name = "REV") - ) + name = "REVCHANGES", + joinColumns = @JoinColumn(name = "REV") + ) @Column(name = "ENTITYNAME") @ModifiedEntityNames private Set modifiedEntityNames = new HashSet<>(); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTrackingRevisionListenerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTrackingRevisionListenerTest.java index 4c0bc1b42885..9668f9c1b688 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTrackingRevisionListenerTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTrackingRevisionListenerTest.java @@ -4,16 +4,19 @@ */ package org.hibernate.orm.test.envers; -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Temporal; +import jakarta.persistence.TemporalType; import org.hibernate.annotations.CreationTimestamp; import org.hibernate.cfg.AvailableSettings; -import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; @@ -23,24 +26,17 @@ import org.hibernate.envers.RevisionTimestamp; import org.hibernate.envers.RevisionType; import org.hibernate.jpa.boot.spi.Bootstrap; - import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManagerFactory; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; +import java.util.Arrays; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; /** * @author Vlad Mihalcea @@ -50,87 +46,75 @@ public class EntityTypeChangeAuditTrackingRevisionListenerTest extends EntityMan @Override protected Class[] getAnnotatedClasses() { return new Class[] { - Customer.class, - CustomTrackingRevisionEntity.class, - EntityType.class + Customer.class, + CustomTrackingRevisionEntity.class, + EntityType.class }; } @Test public void testLifecycle() { - final EntityManagerFactory testEmf = produceEntityManagerFactory(); - - doInJPA( () -> testEmf, entityManager -> { - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - - entityManager.persist(customer); - }); + try (final EntityManagerFactory testEmf = produceEntityManagerFactory()) { + + testEmf.runInTransaction( entityManager -> { + Customer customer = new Customer(); + customer.setId( 1L ); + customer.setFirstName( "John" ); + customer.setLastName( "Doe" ); + + entityManager.persist( customer ); + } ); + + try (EntityManagerFactory entityManagerFactory = buildEntityManagerFactory()) { + entityManagerFactory.runInTransaction( entityManager -> { + ApplicationCustomer customer = new ApplicationCustomer(); + customer.setId( 2L ); + customer.setFirstName( "John" ); + customer.setLastName( "Doe Jr." ); + + entityManager.persist( customer ); + } ); + + entityManagerFactory.runInTransaction( entityManager -> { + //tag::envers-tracking-modified-entities-revchanges-query-example[] + AuditReader auditReader = AuditReaderFactory.get( entityManager ); + + List revisions = auditReader.getRevisions( + ApplicationCustomer.class, + 1L + ); + + CustomTrackingRevisionEntity revEntity = auditReader.findRevision( + CustomTrackingRevisionEntity.class, + revisions.get( 0 ) + ); + + Set modifiedEntityTypes = revEntity.getModifiedEntityTypes(); + assertThat( modifiedEntityTypes ).hasSize( 1 ); + + EntityType entityType = modifiedEntityTypes.iterator().next(); + assertThat( entityType.getEntityClassName() ).isEqualTo( Customer.class.getName() ); + //end::envers-tracking-modified-entities-revchanges-query-example[] + } ); + } + } + } - EntityManagerFactory entityManagerFactory = null; - try { - Map settings = buildSettings(); - settings.put( + private EntityManagerFactory buildEntityManagerFactory() { + Map settings = buildSettings(); + settings.put( AvailableSettings.LOADED_CLASSES, Arrays.asList( - ApplicationCustomer.class, - CustomTrackingRevisionEntity.class, - EntityType.class + ApplicationCustomer.class, + CustomTrackingRevisionEntity.class, + EntityType.class ) - ); - settings.put( - AvailableSettings.HBM2DDL_AUTO, - "update" - ); - entityManagerFactory = Bootstrap.getEntityManagerFactoryBuilder( - new TestingPersistenceUnitDescriptorImpl(getClass().getSimpleName()), - settings - ).build().unwrap(SessionFactoryImplementor.class); - - final EntityManagerFactory emf = entityManagerFactory; - - doInJPA(() -> emf, entityManager -> { - ApplicationCustomer customer = new ApplicationCustomer(); - customer.setId(2L); - customer.setFirstName("John"); - customer.setLastName("Doe Jr."); - - entityManager.persist(customer); - }); - - doInJPA(() -> emf, entityManager -> { - //tag::envers-tracking-modified-entities-revchanges-query-example[] - AuditReader auditReader = AuditReaderFactory.get(entityManager); - - List revisions = auditReader.getRevisions( - ApplicationCustomer.class, - 1L - ); - - CustomTrackingRevisionEntity revEntity = auditReader.findRevision( - CustomTrackingRevisionEntity.class, - revisions.get(0) - ); - - Set modifiedEntityTypes = revEntity.getModifiedEntityTypes(); - assertEquals(1, modifiedEntityTypes.size()); - - EntityType entityType = modifiedEntityTypes.iterator().next(); - assertEquals( - Customer.class.getName(), - entityType.getEntityClassName() - ); - //end::envers-tracking-modified-entities-revchanges-query-example[] - }); - } - finally { - if (entityManagerFactory != null) { - entityManagerFactory.close(); - } - testEmf.close(); - } + ); + settings.put( AvailableSettings.HBM2DDL_AUTO, "update" ); + return Bootstrap.getEntityManagerFactoryBuilder( + new TestingPersistenceUnitDescriptorImpl( getClass().getSimpleName() ), + settings ) + .build(); } @Audited @@ -241,7 +225,7 @@ public void entityChanged(Class entityClass, RevisionType revisionType, Object revisionEntity) { String type = entityClass.getName(); - ((CustomTrackingRevisionEntity) revisionEntity).addModifiedEntityType(type); + ((CustomTrackingRevisionEntity) revisionEntity).addModifiedEntityType( type ); } @Override @@ -265,11 +249,11 @@ public static class CustomTrackingRevisionEntity { private long customTimestamp; @OneToMany( - mappedBy="revision", - cascade={ - CascadeType.PERSIST, - CascadeType.REMOVE - } + mappedBy = "revision", + cascade = { + CascadeType.PERSIST, + CascadeType.REMOVE + } ) private Set modifiedEntityTypes = new HashSet<>(); @@ -278,7 +262,7 @@ public Set getModifiedEntityTypes() { } public void addModifiedEntityType(String entityClassName) { - modifiedEntityTypes.add(new EntityType(this, entityClassName)); + modifiedEntityTypes.add( new EntityType( this, entityClassName ) ); } } //end::envers-tracking-modified-entities-revchanges-RevisionEntity-example[] @@ -305,7 +289,7 @@ public EntityType(CustomTrackingRevisionEntity revision, String entityClassName) } //Getters and setters are omitted for brevity - //end::envers-tracking-modified-entities-revchanges-EntityType-example[] + //end::envers-tracking-modified-entities-revchanges-EntityType-example[] public Integer getId() { return id; @@ -330,7 +314,7 @@ public String getEntityClassName() { public void setEntityClassName(String entityClassName) { this.entityClassName = entityClassName; } - //tag::envers-tracking-modified-entities-revchanges-EntityType-example[] + //tag::envers-tracking-modified-entities-revchanges-EntityType-example[] } //end::envers-tracking-modified-entities-revchanges-EntityType-example[] } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessType.java deleted file mode 100644 index 6ff70c614db0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessType.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.accesstype; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class MixedAccessType extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {MixedAccessTypeEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - MixedAccessTypeEntity mate = new MixedAccessTypeEntity( "data" ); - em.persist( mate ); - id1 = mate.readId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - mate = em.find( MixedAccessTypeEntity.class, id1 ); - mate.writeData( "data2" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( MixedAccessTypeEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - MixedAccessTypeEntity ver1 = new MixedAccessTypeEntity( id1, "data" ); - MixedAccessTypeEntity ver2 = new MixedAccessTypeEntity( id1, "data2" ); - - MixedAccessTypeEntity rev1 = getAuditReader().find( MixedAccessTypeEntity.class, id1, 1 ); - MixedAccessTypeEntity rev2 = getAuditReader().find( MixedAccessTypeEntity.class, id1, 2 ); - - assert rev1.isDataSet(); - assert rev2.isDataSet(); - - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessTypeTest.java new file mode 100644 index 000000000000..ee3f74bbeb88 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessTypeTest.java @@ -0,0 +1,80 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.accesstype; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Adam Warski (adam at warski dot org) + */ +@Jpa( + annotatedClasses = { + MixedAccessTypeEntity.class + } +) +@EnversTest +public class MixedAccessTypeTest { + private Integer id1; + + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( + em -> { + MixedAccessTypeEntity mate = new MixedAccessTypeEntity( "data" ); + em.persist( mate ); + id1 = mate.readId(); + em.getTransaction().commit(); + + em.getTransaction().begin(); + mate = em.find( MixedAccessTypeEntity.class, id1 ); + mate.writeData( "data2" ); + } + ); + } + + @Test + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( + + em -> { + List revisions = AuditReaderFactory.get( em ) + .getRevisions( MixedAccessTypeEntity.class, id1 ); + assertThat( revisions ).isEqualTo( Arrays.asList( 1, 2 ) ); + } ); + } + + @Test + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( + entityManager -> { + MixedAccessTypeEntity ver1 = new MixedAccessTypeEntity( id1, "data" ); + MixedAccessTypeEntity ver2 = new MixedAccessTypeEntity( id1, "data2" ); + + MixedAccessTypeEntity rev1 = AuditReaderFactory.get( entityManager ) + .find( MixedAccessTypeEntity.class, id1, 1 ); + MixedAccessTypeEntity rev2 = AuditReaderFactory.get( entityManager ) + .find( MixedAccessTypeEntity.class, id1, 2 ); + + assertThat( rev1.isDataSet() ).isTrue(); + assertThat( rev2.isDataSet() ).isTrue(); + + assertThat( rev1.equals( ver1 ) ).isTrue(); + assertThat( rev2.equals( ver2 ) ).isTrue(); + } + ); + + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ParentReferencingChildTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ParentReferencingChildTest.java index 4b5d9bc7df04..339b31843b0f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ParentReferencingChildTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ParentReferencingChildTest.java @@ -4,87 +4,103 @@ */ package org.hibernate.orm.test.envers.integration.inheritance.joined.relation; -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.assertj.core.api.Assertions.assertThat; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-3843") -public class ParentReferencingChildTest extends BaseEnversJPAFunctionalTestCase { +@Jpa( + annotatedClasses = { + Person.class, Role.class, RightsSubject.class + } +) +@EnversTest +public class ParentReferencingChildTest { Person expLukaszRev1 = null; Role expAdminRev1 = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Person.class, Role.class, RightsSubject.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { Person lukasz = new Person(); - lukasz.setName( "Lukasz" ); - lukasz.setGroup( "IT" ); - em.persist( lukasz ); Role admin = new Role(); - admin.setName( "Admin" ); - admin.setGroup( "Confidential" ); - lukasz.getRoles().add( admin ); - admin.getMembers().add( lukasz ); - em.persist( admin ); - em.getTransaction().commit(); + scope.inTransaction( + entityManager -> { + // Revision 1 + lukasz.setName( "Lukasz" ); + lukasz.setGroup( "IT" ); + entityManager.persist( lukasz ); + admin.setName( "Admin" ); + admin.setGroup( "Confidential" ); + lukasz.getRoles().add( admin ); + admin.getMembers().add( lukasz ); + entityManager.persist( admin ); + } + ); expLukaszRev1 = new Person( lukasz.getId(), "IT", "Lukasz" ); expAdminRev1 = new Role( admin.getId(), "Confidential", "Admin" ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Person.class, expLukaszRev1.getId() ) ); - Assert.assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( - RightsSubject.class, - expLukaszRev1.getId() - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( + entityManager -> { + assertThat( AuditReaderFactory.get( entityManager ) + .getRevisions( Person.class, expLukaszRev1.getId() ) ) + .isEqualTo( Arrays.asList( 1 ) ); + assertThat( AuditReaderFactory.get( entityManager ) + .getRevisions( RightsSubject.class, expLukaszRev1.getId() ) ) + .isEqualTo( Arrays.asList( 1 ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Role.class, expAdminRev1.getId() ) ); - Assert.assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( - RightsSubject.class, - expAdminRev1.getId() - ) + assertThat( AuditReaderFactory.get( entityManager ) + .getRevisions( Role.class, expAdminRev1.getId() ) ) + .isEqualTo( Arrays.asList( 1 ) ); + assertThat( AuditReaderFactory.get( entityManager ).getRevisions( + RightsSubject.class, + expAdminRev1.getId() + ) ).isEqualTo( Arrays.asList( 1 ) ); + } ); } @Test - public void testHistoryOfLukasz() { - Person lukaszRev1 = getAuditReader().find( Person.class, expLukaszRev1.getId(), 1 ); - RightsSubject rightsSubjectLukaszRev1 = getAuditReader().find( RightsSubject.class, expLukaszRev1.getId(), 1 ); + public void testHistoryOfLukasz(EntityManagerFactoryScope scope) { + scope.inEntityManager( + entityManager -> { + Person lukaszRev1 = AuditReaderFactory.get( entityManager ) + .find( Person.class, expLukaszRev1.getId(), 1 ); + RightsSubject rightsSubjectLukaszRev1 = AuditReaderFactory.get( entityManager ) + .find( RightsSubject.class, expLukaszRev1.getId(), 1 ); - Assert.assertEquals( expLukaszRev1, lukaszRev1 ); - Assert.assertEquals( TestTools.makeSet( expAdminRev1 ), lukaszRev1.getRoles() ); - Assert.assertEquals( TestTools.makeSet( expAdminRev1 ), rightsSubjectLukaszRev1.getRoles() ); + assertThat( lukaszRev1 ).isEqualTo( expLukaszRev1 ); + assertThat( lukaszRev1.getRoles() ).isEqualTo( TestTools.makeSet( expAdminRev1 ) ); + assertThat( rightsSubjectLukaszRev1.getRoles() ).isEqualTo( TestTools.makeSet( expAdminRev1 ) ); + } + ); } @Test - public void testHistoryOfAdmin() { - Role adminRev1 = getAuditReader().find( Role.class, expAdminRev1.getId(), 1 ); + public void testHistoryOfAdmin(EntityManagerFactoryScope scope) { + scope.inEntityManager( + entityManager -> { + Role adminRev1 = AuditReaderFactory.get( entityManager ) + .find( Role.class, expAdminRev1.getId(), 1 ); - Assert.assertEquals( expAdminRev1, adminRev1 ); - Assert.assertEquals( TestTools.makeSet( expLukaszRev1 ), adminRev1.getMembers() ); + assertThat( adminRev1 ).isEqualTo( expAdminRev1 ); + assertThat( adminRev1.getMembers() ).isEqualTo( TestTools.makeSet( expLukaszRev1 ) ); + } + ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StoreDeletedData.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StoreDeletedData.java deleted file mode 100644 index e5ae929931b7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StoreDeletedData.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.criteria.AuditDisjunction; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; - -/** - * A test which checks if the data of a deleted entity is stored when the setting is on. - * - * @author Adam Warski (adam at warski dot org) - */ -@SuppressWarnings("unchecked") -public class StoreDeletedData extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - private Integer id3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - em.persist( site1 ); - id1 = site1.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - em.remove( site1 ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - StrIntTestEntity site2 = new StrIntTestEntity( "b", 20 ); - em.persist( site2 ); - id2 = site2.getId(); - StrIntTestEntity site3 = new StrIntTestEntity( "c", 30 ); - em.persist( site3 ); - id3 = site3.getId(); - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - em.remove( site2 ); - em.remove( site3 ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testRevisionsPropertyEqQuery() { - List revs_id1 = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - Assert.assertEquals( 2, revs_id1.size() ); - Assert.assertEquals( new StrIntTestEntity( "a", 10, id1 ), ((Object[]) revs_id1.get( 0 ))[0] ); - Assert.assertEquals( new StrIntTestEntity( "a", 10, id1 ), ((Object[]) revs_id1.get( 1 ))[0] ); - } - - @Test - @JiraKey(value = "HHH-7800") - public void testMaximizeInDisjunction() { - List queryIds = Arrays.asList( id2, id3 ); - - AuditDisjunction disjunction = AuditEntity.disjunction(); - for ( Integer id : queryIds ) { - AuditCriterion crit = AuditEntity.revisionNumber().maximize() - .add( AuditEntity.id().eq( id ) ) - .add( AuditEntity.revisionType().ne( RevisionType.DEL ) ); - disjunction.add( crit ); - // Workaround: using this line instead works correctly: - // disjunction.add(AuditEntity.conjunction().add(crit)); - } - - List beforeDeletionRevisions = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, false ) - .add( disjunction ) - .addOrder( AuditEntity.property( "id" ).asc() ) - .getResultList(); - - Assert.assertEquals( 2, beforeDeletionRevisions.size() ); - - Object[] result1 = (Object[]) beforeDeletionRevisions.get( 0 ); - Object[] result2 = (Object[]) beforeDeletionRevisions.get( 1 ); - - Assert.assertEquals( new StrIntTestEntity( "b", 20, id2 ), result1[0] ); - // Making sure that we have received an entity added at revision 3. - Assert.assertEquals( 3, ((SequenceIdRevisionEntity) result1[1]).getId() ); - Assert.assertEquals( RevisionType.ADD, result1[2] ); - Assert.assertEquals( new StrIntTestEntity( "c", 30, id3 ), result2[0] ); - // Making sure that we have received an entity added at revision 3. - Assert.assertEquals( 3, ((SequenceIdRevisionEntity) result2[1]).getId() ); - Assert.assertEquals( RevisionType.ADD, result2[2] ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StoreDeletedDataTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StoreDeletedDataTest.java new file mode 100644 index 000000000000..71a6e26d1e27 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StoreDeletedDataTest.java @@ -0,0 +1,137 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.query; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.RevisionType; +import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; +import org.hibernate.envers.query.AuditEntity; +import org.hibernate.envers.query.criteria.AuditCriterion; +import org.hibernate.envers.query.criteria.AuditDisjunction; +import org.hibernate.orm.test.envers.entities.StrIntTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * A test which checks if the data of a deleted entity is stored when the setting is on. + * + * @author Adam Warski (adam at warski dot org) + */ +@SuppressWarnings("unchecked") +@Jpa( + annotatedClasses = { + StrIntTestEntity.class + }, + properties = @Setting(name = EnversSettings.STORE_DATA_AT_DELETE, value = "true") +) +@EnversTest +public class StoreDeletedDataTest { + private Integer id1; + private Integer id2; + private Integer id3; + + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( + entityManager -> { + // Revision 1 + StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); + entityManager.persist( site1 ); + id1 = site1.getId(); + entityManager.getTransaction().commit(); + + // Revision 2 + entityManager.getTransaction().begin(); + entityManager.remove( site1 ); + entityManager.getTransaction().commit(); + + // Revision 3 + entityManager.getTransaction().begin(); + StrIntTestEntity site2 = new StrIntTestEntity( "b", 20 ); + entityManager.persist( site2 ); + id2 = site2.getId(); + StrIntTestEntity site3 = new StrIntTestEntity( "c", 30 ); + entityManager.persist( site3 ); + id3 = site3.getId(); + entityManager.getTransaction().commit(); + + // Revision 4 + entityManager.getTransaction().begin(); + entityManager.remove( site2 ); + entityManager.remove( site3 ); + } + ); + } + + @Test + public void testRevisionsPropertyEqQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( + entityManager -> { + List revs_id1 = AuditReaderFactory.get( entityManager ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .add( AuditEntity.id().eq( id1 ) ) + .getResultList(); + + assertThat( revs_id1 ).hasSize( 2 ); + assertThat( ((Object[]) revs_id1.get( 0 ))[0] ).isEqualTo( new StrIntTestEntity( "a", 10, id1 ) ); + assertThat( ((Object[]) revs_id1.get( 1 ))[0] ).isEqualTo( new StrIntTestEntity( "a", 10, id1 ) ); + + } + ); + } + + @Test + @JiraKey(value = "HHH-7800") + public void testMaximizeInDisjunction(EntityManagerFactoryScope scope) { + scope.inEntityManager( + entityManager -> { + List queryIds = Arrays.asList( id2, id3 ); + + AuditDisjunction disjunction = AuditEntity.disjunction(); + for ( Integer id : queryIds ) { + AuditCriterion crit = AuditEntity.revisionNumber().maximize() + .add( AuditEntity.id().eq( id ) ) + .add( AuditEntity.revisionType().ne( RevisionType.DEL ) ); + disjunction.add( crit ); + // Workaround: using this line instead works correctly: + // disjunction.add(AuditEntity.conjunction().add(crit)); + } + + List beforeDeletionRevisions = AuditReaderFactory.get( entityManager ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, false ) + .add( disjunction ) + .addOrder( AuditEntity.property( "id" ).asc() ) + .getResultList(); + + assertThat( beforeDeletionRevisions ).hasSize( 2 ); + + Object[] result1 = (Object[]) beforeDeletionRevisions.get( 0 ); + Object[] result2 = (Object[]) beforeDeletionRevisions.get( 1 ); + + assertThat( result1[0] ).isEqualTo( new StrIntTestEntity( "b", 20, id2 ) ); + // Making sure that we have received an entity added at revision 3. + assertThat( ((SequenceIdRevisionEntity) result1[1]).getId() ).isEqualTo( 3 ); + assertThat( result1[2] ).isEqualTo( RevisionType.ADD ); + assertThat( result2[0] ).isEqualTo( new StrIntTestEntity( "c", 30, id3 ) ); + // Making sure that we have received an entity added at revision 3. + assertThat( ((SequenceIdRevisionEntity) result2[1]).getId() ).isEqualTo( 3 ); + assertThat( result2[2] ).isEqualTo( RevisionType.ADD ); + } + ); + + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integrator/BasicIntegratorTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integrator/BasicIntegratorTest.java index 0d61ec30932e..65e86938ed73 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integrator/BasicIntegratorTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integrator/BasicIntegratorTest.java @@ -11,7 +11,7 @@ import org.hibernate.testing.orm.junit.JiraKey; import org.hibernate.testing.util.ServiceRegistryUtil; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** * @author Steve Ebersole diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/mapping/enumeratedvalue/CharEnumerateValueTests.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/mapping/enumeratedvalue/CharEnumerateValueTests.java index 98d87b972ea8..d9be65373e62 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/mapping/enumeratedvalue/CharEnumerateValueTests.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/mapping/enumeratedvalue/CharEnumerateValueTests.java @@ -6,7 +6,6 @@ import jakarta.persistence.Column; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; import jakarta.persistence.EnumeratedValue; @@ -14,24 +13,30 @@ import jakarta.persistence.Table; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.envers.Audited; -import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; import org.hibernate.type.SqlTypes; -import org.junit.Test; +import org.junit.jupiter.api.Test; -@JiraKey( "HHH-19747" ) -public class CharEnumerateValueTests extends EntityManagerFactoryBasedFunctionalTest { +@JiraKey("HHH-19747") +@Jpa( + annotatedClasses = { + CharEnumerateValueTests.Person.class + } +) +public class CharEnumerateValueTests { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Person.class}; - } @Test - public void testBasicUsage() { - final EntityManagerFactory testEmf = produceEntityManagerFactory(); - testEmf.close(); + public void testBasicUsage(EntityManagerFactoryScope scope) { + scope.inEntityManager( + entityManager -> { + Person person = new Person( 1, "John ", Gender.MALE ); + entityManager.persist( person ); + } + ); } public enum Gender { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/EvictAuditDataAfterCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/EvictAuditDataAfterCommitTest.java index d1cf321f62b6..c9cc62b6d5f9 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/EvictAuditDataAfterCommitTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/EvictAuditDataAfterCommitTest.java @@ -4,111 +4,122 @@ */ package org.hibernate.orm.test.envers.performance; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.Session; import org.hibernate.engine.spi.EntityEntry; import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.fail; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class EvictAuditDataAfterCommitTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, SetRefEdEntity.class, SetRefIngEntity.class}; - } +@DomainModel( + annotatedClasses = { + StrTestEntity.class, SetRefEdEntity.class, SetRefIngEntity.class + } +) +@SessionFactory +@EnversTest +public class EvictAuditDataAfterCommitTest { @Test @JiraKey(value = "HHH-6614") - public void testSessionCacheClear() { - Session session = openSession(); - session.getTransaction().begin(); - StrTestEntity ste = new StrTestEntity( "data" ); - session.persist( ste ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, "org.hibernate.orm.test.envers.entities.StrTestEntity_AUD" ); + public void testSessionCacheClear(SessionFactoryScope scope) { + scope.inTransaction( + session -> { + StrTestEntity ste = new StrTestEntity( "data" ); + session.persist( ste ); + } + ); + scope.inSession( + session -> + checkEmptyAuditSessionCache( session, + "org.hibernate.orm.test.envers.entities.StrTestEntity_AUD" ) + ); } @Test @JiraKey(value = "HHH-6614") - public void testSessionCacheCollectionClear() { + public void testSessionCacheCollectionClear(SessionFactoryScope scope) { final String[] auditEntityNames = new String[] { "org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity_AUD", "org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity_AUD" }; - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); - SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2" ); + scope.inTransaction( + session -> { + SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); + SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); + SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); + SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2" ); - Session session = openSession(); - session.getTransaction().begin(); - session.persist( ed1 ); - session.persist( ed2 ); - session.persist( ing1 ); - session.persist( ing2 ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); + session.persist( ed1 ); + session.persist( ed2 ); + session.persist( ing1 ); + session.persist( ing2 ); + session.getTransaction().commit(); + checkEmptyAuditSessionCache( session, auditEntityNames ); - session.getTransaction().begin(); - ed1 = (SetRefEdEntity) session.getReference( SetRefEdEntity.class, ed1.getId() ); - ing1.setReference( ed1 ); - ing2.setReference( ed1 ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); + session.getTransaction().begin(); + ed1 = session.getReference( SetRefEdEntity.class, ed1.getId() ); + ing1.setReference( ed1 ); + ing2.setReference( ed1 ); + session.getTransaction().commit(); + checkEmptyAuditSessionCache( session, auditEntityNames ); - session.getTransaction().begin(); - ed2 = (SetRefEdEntity) session.getReference( SetRefEdEntity.class, ed2.getId() ); - Set reffering = new HashSet(); - reffering.add( ing1 ); - reffering.add( ing2 ); - ed2.setReffering( reffering ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); + session.getTransaction().begin(); + ed2 = session.getReference( SetRefEdEntity.class, ed2.getId() ); + Set reffering = new HashSet<>(); + reffering.add( ing1 ); + reffering.add( ing2 ); + ed2.setReffering( reffering ); + session.getTransaction().commit(); + checkEmptyAuditSessionCache( session, auditEntityNames ); - session.getTransaction().begin(); - ed2 = (SetRefEdEntity) session.getReference( SetRefEdEntity.class, ed2.getId() ); - ed2.getReffering().remove( ing1 ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); + session.getTransaction().begin(); + ed2 = session.getReference( SetRefEdEntity.class, ed2.getId() ); + ed2.getReffering().remove( ing1 ); + session.getTransaction().commit(); + checkEmptyAuditSessionCache( session, auditEntityNames ); - session.getTransaction().begin(); - ed2 = (SetRefEdEntity) session.getReference( SetRefEdEntity.class, ed2.getId() ); - ed2.getReffering().iterator().next().setData( "mod_data_ing_2" ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); - - session.close(); + session.getTransaction().begin(); + ed2 = session.getReference( SetRefEdEntity.class, ed2.getId() ); + ed2.getReffering().iterator().next().setData( "mod_data_ing_2" ); + checkEmptyAuditSessionCache( session, auditEntityNames ); + } + ); } - private void checkEmptyAuditSessionCache(Session session, String... auditEntityNames) { + private void checkEmptyAuditSessionCache(SessionImplementor session, String... auditEntityNames) { List entityNames = Arrays.asList( auditEntityNames ); - PersistenceContext persistenceContext = ((SessionImplementor) session).getPersistenceContext(); + PersistenceContext persistenceContext = session.getPersistenceContext(); for ( Map.Entry entrySet : persistenceContext.reentrantSafeEntityEntries() ) { final EntityEntry entityEntry = entrySet.getValue(); if ( entityNames.contains( entityEntry.getEntityName() ) ) { - assert false : "Audit data shall not be stored in the session level cache. This causes performance issues."; + fail( "Audit data shall not be stored in the session level cache. This causes performance issues." ); } - Assert.assertFalse( - "Revision entity shall not be stored in the session level cache. This causes performance issues.", - SequenceIdRevisionEntity.class.getName().equals( entityEntry.getEntityName() ) - ); + assertThat( entityEntry.getEntityName() ) + .describedAs( + "Revision entity shall not be stored in the session level cache. This causes performance issues." ) + .isNotEqualTo( SequenceIdRevisionEntity.class.getName() ); } + } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/ExportIdentifierTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/ExportIdentifierTest.java index 66b77d292314..0deacc04df94 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/ExportIdentifierTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/ExportIdentifierTest.java @@ -4,9 +4,6 @@ */ package org.hibernate.orm.test.envers.various; -import java.util.HashSet; -import java.util.Set; - import org.hibernate.boot.internal.BootstrapContextImpl; import org.hibernate.boot.internal.MetadataBuilderImpl; import org.hibernate.boot.model.naming.Identifier; @@ -18,21 +15,27 @@ import org.hibernate.id.enhanced.SequenceStructure; import org.hibernate.testing.DialectChecks; import org.hibernate.testing.RequiresDialectFeature; +import org.hibernate.testing.orm.junit.BaseUnitTest; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.junit4.BaseUnitTestCase; import org.hibernate.testing.util.ServiceRegistryUtil; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import java.util.HashSet; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; @RequiresDialectFeature(DialectChecks.SupportsSequences.class) -public class ExportIdentifierTest extends BaseUnitTestCase { +@BaseUnitTest +public class ExportIdentifierTest { @Test - @JiraKey( value = "HHH-12935" ) + @JiraKey(value = "HHH-12935") public void testUniqueExportableIdentifier() { final StandardServiceRegistry ssr = ServiceRegistryUtil.serviceRegistry(); - final MetadataBuilderImpl.MetadataBuildingOptionsImpl options = new MetadataBuilderImpl.MetadataBuildingOptionsImpl( ssr ); + final MetadataBuilderImpl.MetadataBuildingOptionsImpl options = new MetadataBuilderImpl.MetadataBuildingOptionsImpl( + ssr ); options.setBootstrapContext( new BootstrapContextImpl( ssr, options ) ); final Database database = new Database( options ); @@ -41,8 +44,10 @@ public void testUniqueExportableIdentifier() { database.locateNamespace( Identifier.toIdentifier( "catalog2" ), null ); database.locateNamespace( null, Identifier.toIdentifier( "schema1" ) ); database.locateNamespace( null, Identifier.toIdentifier( "schema2" ) ); - database.locateNamespace( Identifier.toIdentifier( "catalog_both_1" ), Identifier.toIdentifier( "schema_both_1" ) ); - database.locateNamespace( Identifier.toIdentifier( "catalog_both_2" ), Identifier.toIdentifier( "schema_both_2" ) ); + database.locateNamespace( Identifier.toIdentifier( "catalog_both_1" ), + Identifier.toIdentifier( "schema_both_1" ) ); + database.locateNamespace( Identifier.toIdentifier( "catalog_both_2" ), + Identifier.toIdentifier( "schema_both_2" ) ); try { final Set exportIdentifierSet = new HashSet<>(); @@ -62,8 +67,8 @@ public void testUniqueExportableIdentifier() { exportIdentifierSet.add( namespace.getSequences().iterator().next().getExportIdentifier() ); namespaceSize++; } - assertEquals( 7, namespaceSize ); - assertEquals( 7, exportIdentifierSet.size() ); + assertThat( namespaceSize ).isEqualTo( 7 ); + assertThat( exportIdentifierSet.size() ).isEqualTo( 7 ); } finally { StandardServiceRegistryBuilder.destroy( ssr ); From 545512e1a9e1409b2020b54b9db2da519bba7b5a Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Tue, 11 Nov 2025 16:15:42 +0100 Subject: [PATCH 2/5] HHH-19921 Drop last JUnit 4 usages in Hibernate Envers --- ...ityTypeChangeAuditDefaultTrackingTest.java | 1 - .../ReadEntityAssociatedAuditedTest.java | 2 +- .../HasChangedAuditedManyToManyTest.java | 216 ++++++++++-------- .../envers/various/ExportIdentifierTest.java | 6 +- 4 files changed, 124 insertions(+), 101 deletions(-) diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditDefaultTrackingTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditDefaultTrackingTest.java index 42b2591c6148..38c2c5038d79 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditDefaultTrackingTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditDefaultTrackingTest.java @@ -60,7 +60,6 @@ public void testLifecycle() { customer.setLastName( "Doe Jr." ); entityManager.persist( customer ); - entityManager.getTransaction().commit(); } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/ReadEntityAssociatedAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/ReadEntityAssociatedAuditedTest.java index 816fbac4f888..501ad3355301 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/ReadEntityAssociatedAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/ReadEntityAssociatedAuditedTest.java @@ -81,7 +81,7 @@ public void testGetAssociationWithEntityName(SessionFactoryScope scope) { } private void loadDataOnSessionAndAuditReader(SessionImplementor session, AuditReader auditReader) { - currentCar1 = (Car) session.get( Car.class, id_car1 ); + currentCar1 = session.get( Car.class, id_car1 ); currentPerson1 = (Person) session.get( "Personaje", id_pers1 ); car1 = auditReader.find( Car.class, id_car1, 1 ); person1 = car1.getOwner(); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyTest.java index e44a37585c97..e26f3bf8187c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyTest.java @@ -4,23 +4,26 @@ */ package org.hibernate.orm.test.envers.integration.modifiedflags; -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.MappingException; import org.hibernate.dialect.H2Dialect; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited.Car; import org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited.Person; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.RequiresDialect; -import org.junit.Test; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; -import static junit.framework.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; @@ -29,107 +32,128 @@ * @author Michal Skowronek (mskowr at o2 dot pl) */ @RequiresDialect(H2Dialect.class) -// todo (envers-junit): migrate this after AbstractModifiedFlagsOneSessionTest -public class HasChangedAuditedManyToManyTest extends AbstractModifiedFlagsOneSessionTest { +@DomainModel(xmlMappings = "mappings/entityNames/manyToManyAudited/mappings.hbm.xml") +@SessionFactory +@ServiceRegistry( + settings = @Setting( + name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, + value = "true" + ) +) +@EnversTest +public class HasChangedAuditedManyToManyTest { private long id_car1; private long id_pers1; private long id_pers2; - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/manyToManyAudited/mappings.hbm.xml" + + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + scope.inTransaction( + session -> { + Person pers1 = new Person( "Hernan", 28 ); + Person pers2 = new Person( "Leandro", 29 ); + Person pers3 = new Person( "Barba", 32 ); + Person pers4 = new Person( "Camomo", 15 ); + + //REV 1 + List owners = new ArrayList(); + owners.add( pers1 ); + owners.add( pers2 ); + owners.add( pers3 ); + Car car1 = new Car( 5, owners ); + + session.persist( car1 ); + session.getTransaction().commit(); + id_pers1 = pers1.getId(); + id_car1 = car1.getId(); + id_pers2 = pers2.getId(); + + owners = new ArrayList(); + owners.add( pers2 ); + owners.add( pers3 ); + owners.add( pers4 ); + Car car2 = new Car( 27, owners ); + //REV 2 + session.getTransaction().begin(); + Person person1 = (Person) session.get( "Personaje", id_pers1 ); + person1.setName( "Hernan David" ); + person1.setAge( 40 ); + session.persist( car1 ); + session.persist( car2 ); + } ); - config.addFile( new File( url.toURI() ) ); } @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 28 ); - Person pers2 = new Person( "Leandro", 29 ); - Person pers3 = new Person( "Barba", 32 ); - Person pers4 = new Person( "Camomo", 15 ); - - //REV 1 - getSession().getTransaction().begin(); - List owners = new ArrayList(); - owners.add( pers1 ); - owners.add( pers2 ); - owners.add( pers3 ); - Car car1 = new Car( 5, owners ); - - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_pers1 = pers1.getId(); - id_car1 = car1.getId(); - id_pers2 = pers2.getId(); - - owners = new ArrayList(); - owners.add( pers2 ); - owners.add( pers3 ); - owners.add( pers4 ); - Car car2 = new Car( 27, owners ); - //REV 2 - getSession().getTransaction().begin(); - Person person1 = (Person) getSession().get( "Personaje", id_pers1 ); - person1.setName( "Hernan David" ); - person1.setAge( 40 ); - getSession().persist( car1 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - } + public void testHasChangedPerson1(SessionFactoryScope scope) { + scope.inSession( + session -> { + List list = AuditReaderFactory.get( session ).createQuery() + .forRevisionsOfEntity( Person.class, "Personaje", false, false ) + .add( AuditEntity.id().eq( id_pers1 ) ) + .add( AuditEntity.property( "cars" ).hasChanged() ) + .getResultList(); + assertThat( list ).hasSize( 1 ); + assertThat( extractRevisionNumbers( list ) ).isEqualTo( makeList( 1 ) ); + + list = AuditReaderFactory.get( session ).createQuery() + .forRevisionsOfEntity( Person.class, "Personaje", false, false ) + .add( AuditEntity.id().eq( id_pers1 ) ) + .add( AuditEntity.property( "cars" ).hasNotChanged() ) + .getResultList(); + assertThat( list ).hasSize( 1 ); + assertThat( extractRevisionNumbers( list ) ).isEqualTo( makeList( 2 ) ); + } + ); - @Test - public void testHasChangedPerson1() throws Exception { - List list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) - .add( AuditEntity.id().eq( id_pers1 ) ) - .add( AuditEntity.property( "cars" ).hasChanged() ) - .getResultList(); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) - .add( AuditEntity.id().eq( id_pers1 ) ) - .add( AuditEntity.property( "cars" ).hasNotChanged() ) - .getResultList(); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); } @Test - public void testHasChangedPerson2() throws Exception { - List list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) - .add( AuditEntity.id().eq( id_pers2 ) ) - .add( AuditEntity.property( "cars" ).hasChanged() ) - .getResultList(); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) - .add( AuditEntity.id().eq( id_pers2 ) ) - .add( AuditEntity.property( "cars" ).hasNotChanged() ) - .getResultList(); - assertEquals( 0, list.size() ); + public void testHasChangedPerson2(SessionFactoryScope scope) { + scope.inSession( + session -> { + List list = AuditReaderFactory.get( session ).createQuery() + .forRevisionsOfEntity( Person.class, "Personaje", false, false ) + .add( AuditEntity.id().eq( id_pers2 ) ) + .add( AuditEntity.property( "cars" ).hasChanged() ) + .getResultList(); + assertThat( list ).hasSize( 2 ); + assertThat( extractRevisionNumbers( list ) ) + .isEqualTo( makeList( 1, 2 ) ); + + list = AuditReaderFactory.get( session ).createQuery() + .forRevisionsOfEntity( Person.class, "Personaje", false, false ) + .add( AuditEntity.id().eq( id_pers2 ) ) + .add( AuditEntity.property( "cars" ).hasNotChanged() ) + .getResultList(); + assertThat( list ).hasSize( 0 ); + } + ); } @Test - public void testHasChangedCar1() throws Exception { - List list = getAuditReader().createQuery().forRevisionsOfEntity( Car.class, false, false ) - .add( AuditEntity.id().eq( id_car1 ) ) - .add( AuditEntity.property( "owners" ).hasChanged() ) - .getResultList(); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( Car.class, false, false ) - .add( AuditEntity.id().eq( id_car1 ) ) - .add( AuditEntity.property( "owners" ).hasNotChanged() ) - .getResultList(); - assertEquals( 0, list.size() ); + public void testHasChangedCar1(SessionFactoryScope scope) { + scope.inSession( + session -> { + List list = AuditReaderFactory.get( session ).createQuery() + .forRevisionsOfEntity( Car.class, false, false ) + .add( AuditEntity.id().eq( id_car1 ) ) + .add( AuditEntity.property( "owners" ).hasChanged() ) + .getResultList(); + assertThat( list ).hasSize( 1 ); + assertThat( extractRevisionNumbers( list ) ).isEqualTo( makeList( 1 ) ); + + list = AuditReaderFactory.get( session ).createQuery() + .forRevisionsOfEntity( Car.class, false, false ) + .add( AuditEntity.id().eq( id_car1 ) ) + .add( AuditEntity.property( "owners" ).hasNotChanged() ) + .getResultList(); + assertThat( list ).hasSize( 0 ); + } + ); + } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/ExportIdentifierTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/ExportIdentifierTest.java index 0deacc04df94..49e14cb6ba4c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/ExportIdentifierTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/ExportIdentifierTest.java @@ -13,10 +13,10 @@ import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.id.enhanced.SequenceStructure; -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; import org.hibernate.testing.orm.junit.BaseUnitTest; +import org.hibernate.testing.orm.junit.DialectFeatureChecks; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.RequiresDialectFeature; import org.hibernate.testing.util.ServiceRegistryUtil; import org.junit.jupiter.api.Test; @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThat; -@RequiresDialectFeature(DialectChecks.SupportsSequences.class) +@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsSequences.class) @BaseUnitTest public class ExportIdentifierTest { From 93ee0071b50e30c5fe0f78cae5474880d97eed3e Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Tue, 11 Nov 2025 16:20:40 +0100 Subject: [PATCH 3/5] HHH-19921 Drop last JUnit 4 usages in Hibernate Envers --- .../orm/test/envers/AbstractEnversTest.java | 55 ---- .../test/envers/AbstractOneSessionTest.java | 120 ------- .../envers/BaseEnversFunctionalTestCase.java | 89 ----- .../BaseEnversJPAFunctionalTestCase.java | 306 ------------------ .../orm/test/envers/EnversRunner.java | 221 ------------- .../AbstractModifiedFlagsOneSessionTest.java | 32 -- .../AbstractEntityManagerTest.java | 126 -------- .../performance/AbstractPerformanceTest.java | 87 ----- .../envers/performance/AllPerformance.java | 16 - .../performance/ComplexInsertPerformance.java | 86 ----- .../EvictAuditDataAfterCommitTest.java | 125 ------- .../InsertsOneTransactionPerformance.java | 41 --- .../performance/InsertsPerformance.java | 43 --- .../performance/UpdatesPerformance.java | 67 ---- .../performance/complex/ChildEntity1.java | 103 ------ .../performance/complex/ChildEntity2.java | 92 ------ .../performance/complex/RootEntity.java | 160 --------- 17 files changed, 1769 deletions(-) delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractEnversTest.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractOneSessionTest.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversFunctionalTestCase.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversJPAFunctionalTestCase.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EnversRunner.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsOneSessionTest.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractEntityManagerTest.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractPerformanceTest.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AllPerformance.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/ComplexInsertPerformance.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/EvictAuditDataAfterCommitTest.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsOneTransactionPerformance.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsPerformance.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/UpdatesPerformance.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity1.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity2.java delete mode 100644 hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/RootEntity.java diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractEnversTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractEnversTest.java deleted file mode 100644 index b1fea3be9c47..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractEnversTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Arrays; -import java.util.List; - - -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Selectable; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -import org.jboss.logging.Logger; - -/** - * An abstract Envers test which runs the tests using two audit strategies. - * - * @author Adam Warski (adam at warski dot org) - */ -@RunWith(EnversRunner.class) -public abstract class AbstractEnversTest { - - protected final Logger log = Logger.getLogger( getClass() ); - - private String auditStrategy; - - @Parameterized.Parameters - public static List data() { - return Arrays.asList( - new Object[] {null}, - new Object[] {"org.hibernate.envers.strategy.ValidityAuditStrategy"} - ); - } - - public void setTestData(Object[] data) { - auditStrategy = (String) data[0]; - } - - public String getAuditStrategy() { - return auditStrategy; - } - - protected Column getColumnFromIteratorByName(List selectables, String columnName) { - for ( Selectable s : selectables ) { - Column column = (Column) s; - if ( column.getName().equals( columnName) ) { - return column; - } - } - return null; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractOneSessionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractOneSessionTest.java deleted file mode 100644 index fc6675cc96f9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractOneSessionTest.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; - -import org.hibernate.MappingException; -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.hibernate.cfg.Configuration; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.service.ServiceRegistry; - -import org.hibernate.testing.AfterClassOnce; -import org.hibernate.testing.BeforeClassOnce; -import org.hibernate.testing.ServiceRegistryBuilder; -import org.hibernate.testing.util.ServiceRegistryUtil; -import org.junit.Before; - -/** - * Base class for testing envers with Session when the same session and - * auditReader must be used for the hole test. - * - * @author Hernán Chanfreau - */ -public abstract class AbstractOneSessionTest extends AbstractEnversTest { - protected Configuration config; - private ServiceRegistry serviceRegistry; - private SessionFactory sessionFactory; - private Session session; - private AuditReader auditReader; - - @BeforeClassOnce - public void init() throws URISyntaxException { - config = new Configuration(); - URL url = Thread.currentThread().getContextClassLoader().getResource( getHibernateConfigurationFileName() ); - config.configure( new File( url.toURI() ) ); - // Envers tests expect sequences to not skip values... - config.setProperty( EnversSettings.REVISION_SEQUENCE_NOCACHE, "true" ); - - String auditStrategy = getAuditStrategy(); - if ( auditStrategy != null && !"".equals( auditStrategy ) ) { - config.setProperty( EnversSettings.AUDIT_STRATEGY, auditStrategy ); - } - config.setProperty( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" ); - // These tests always use H2, so we reset the init_sql config here - config.setProperty( "hibernate.connection.init_sql", "" ); - addProperties( config ); - - this.initMappings(); - - ServiceRegistryUtil.applySettings( config.getProperties() ); - - serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( config.getProperties() ); - sessionFactory = config.buildSessionFactory( serviceRegistry ); - } - - protected abstract void initMappings() throws MappingException, URISyntaxException; - - protected void addProperties(Configuration configuration) { - } - - protected String getHibernateConfigurationFileName() { - return "hibernate.test.session-cfg.xml"; - } - - private SessionFactory getSessionFactory() { - return sessionFactory; - } - - @AfterClassOnce - public void closeSessionFactory() { - try { - sessionFactory.close(); - } - finally { - if ( serviceRegistry != null ) { - ServiceRegistryBuilder.destroy( serviceRegistry ); - serviceRegistry = null; - } - } - } - - /** - * Creates a new session and auditReader only if there is nothing created - * before - */ - @Before - public void initializeSession() { - if ( getSession() == null ) { - session = getSessionFactory().openSession(); - auditReader = AuditReaderFactory.get( session ); - } - } - - /** - * Creates a new session and auditReader. - */ - public void forceNewSession() { - session = getSessionFactory().openSession(); - auditReader = AuditReaderFactory.get( session ); - } - - protected Session getSession() { - return session; - } - - - protected AuditReader getAuditReader() { - return auditReader; - } - - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversFunctionalTestCase.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversFunctionalTestCase.java deleted file mode 100644 index b787e90fa8bc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversFunctionalTestCase.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.internal.SessionImpl; -import org.hibernate.resource.transaction.spi.TransactionStatus; - -import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; - -import org.hibernate.service.ServiceRegistry; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -/** - * @author Strong Liu (stliu@hibernate.org) - */ -@RunWith(EnversRunner.class) -public abstract class BaseEnversFunctionalTestCase extends BaseNonConfigCoreFunctionalTestCase { - private String auditStrategy; - - @Parameterized.Parameters - public static List data() { - return Arrays.asList( - new Object[]{ null }, - new Object[]{ "org.hibernate.envers.strategy.ValidityAuditStrategy" } - ); - } - - public void setTestData(Object[] data) { - auditStrategy = (String) data[0]; - } - - public String getAuditStrategy() { - return auditStrategy; - } - - @Override - protected Session getSession() { - Session session = super.getSession(); - if ( session == null || !session.isOpen() ) { - return openSession(); - } - return session; - } - - protected AuditReader getAuditReader() { - Session session = getSession(); - if(session.getTransaction().getStatus() != TransactionStatus.ACTIVE ){ - session.getTransaction().begin(); - } - - return AuditReaderFactory.get( getSession() ); - } - - protected Configuration getConfiguration() { - ServiceRegistry registry = getSession().unwrap(SessionImpl.class ).getSessionFactory().getServiceRegistry(); - return registry.getService( EnversService.class ).getConfig(); - } - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" ); - // Envers tests expect sequences to not skip values... - settings.put( EnversSettings.REVISION_SEQUENCE_NOCACHE, "true" ); - - if ( getAuditStrategy() != null ) { - settings.put( EnversSettings.AUDIT_STRATEGY, getAuditStrategy() ); - } - } - - @Override - protected String getBaseForMappings() { - return ""; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversJPAFunctionalTestCase.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversJPAFunctionalTestCase.java deleted file mode 100644 index b798f5080a12..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversJPAFunctionalTestCase.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.boot.registry.internal.StandardServiceRegistryImpl; -import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.dialect.Dialect; -import org.hibernate.dialect.H2Dialect; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.engine.transaction.internal.jta.JtaStatusHelper; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.boot.internal.EnversIntegrator; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.internal.util.StringHelper; -import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl; -import org.hibernate.jpa.boot.spi.Bootstrap; -import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor; -import org.hibernate.query.sqm.mutation.internal.temptable.GlobalTemporaryTableMutationStrategy; -import org.hibernate.query.sqm.mutation.internal.temptable.LocalTemporaryTableMutationStrategy; - -import org.hibernate.testing.AfterClassOnce; -import org.hibernate.testing.BeforeClassOnce; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.hibernate.testing.junit4.Helper; -import org.hibernate.testing.orm.jpa.PersistenceUnitDescriptorAdapter; -import org.hibernate.testing.orm.junit.DialectContext; -import org.hibernate.testing.util.ServiceRegistryUtil; - -import org.hibernate.query.sqm.mutation.internal.temptable.PersistentTableStrategy; -import org.hibernate.service.ServiceRegistry; -import org.junit.After; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityManagerFactory; -import jakarta.transaction.SystemException; - -/** - * @author Strong Liu (stliu@hibernate.org) - */ -public abstract class BaseEnversJPAFunctionalTestCase extends AbstractEnversTest { - - private static final Dialect dialect = DialectContext.getDialect(); - - private EntityManagerFactoryBuilderImpl entityManagerFactoryBuilder; - private StandardServiceRegistryImpl serviceRegistry; - private SessionFactoryImplementor entityManagerFactory; - - private EntityManager em; - private AuditReader auditReader; - private ArrayList isolatedEms = new ArrayList(); - - protected Dialect getDialect() { - return dialect; - } - - protected EntityManagerFactory entityManagerFactory() { - return entityManagerFactory; - } - - protected StandardServiceRegistryImpl serviceRegistry() { - return serviceRegistry; - } - - protected MetadataImplementor metadata() { - return entityManagerFactoryBuilder.getMetadata(); - } - - @BeforeClassOnce - @SuppressWarnings("unused") - public void buildEntityManagerFactory() throws Exception { - log.trace( "Building EntityManagerFactory" ); - - entityManagerFactoryBuilder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( - buildPersistenceUnitDescriptor(), - buildSettings() - ); - entityManagerFactory = entityManagerFactoryBuilder.build().unwrap( SessionFactoryImplementor.class ); - - serviceRegistry = (StandardServiceRegistryImpl) entityManagerFactory.getServiceRegistry() - .getParentServiceRegistry(); - - afterEntityManagerFactoryBuilt(); - } - - private PersistenceUnitDescriptor buildPersistenceUnitDescriptor() { - return new PersistenceUnitDescriptorAdapter(); - } - - private Map buildSettings() { - Map settings = getConfig(); - addMappings( settings ); - - if ( createSchema() ) { - settings.put( AvailableSettings.HBM2DDL_AUTO, "create-drop" ); - final String secondSchemaName = createSecondSchema(); - if ( StringHelper.isNotEmpty( secondSchemaName ) ) { - if ( !(getDialect() instanceof H2Dialect) ) { - throw new UnsupportedOperationException( "Only H2 dialect supports creation of second schema." ); - } - Helper.createH2Schema( secondSchemaName, settings ); - } - } - - if ( StringHelper.isNotEmpty( getAuditStrategy() ) ) { - settings.put( EnversSettings.AUDIT_STRATEGY, getAuditStrategy() ); - } - - if ( !autoRegisterListeners() ) { - settings.put( EnversIntegrator.AUTO_REGISTER, "false" ); - } - - settings.put( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" ); - - settings.put( AvailableSettings.DIALECT, getDialect().getClass().getName() ); - return settings; - } - - protected Map getConfig() { - Map config = new HashMap(); - - config.put( AvailableSettings.LOADED_CLASSES, Arrays.asList( getAnnotatedClasses() ) ); - - for ( Map.Entry entry : getCachedClasses().entrySet() ) { - config.put( AvailableSettings.CLASS_CACHE_PREFIX + "." + entry.getKey().getName(), entry.getValue() ); - } - - for ( Map.Entry entry : getCachedCollections().entrySet() ) { - config.put( AvailableSettings.COLLECTION_CACHE_PREFIX + "." + entry.getKey(), entry.getValue() ); - } - - if ( getEjb3DD().length > 0 ) { - ArrayList dds = new ArrayList<>(); - dds.addAll( Arrays.asList( getEjb3DD() ) ); - config.put( AvailableSettings.ORM_XML_FILES, dds ); - } - - config.put( PersistentTableStrategy.DROP_ID_TABLES, "true" ); - config.put( GlobalTemporaryTableMutationStrategy.DROP_ID_TABLES, "true" ); - config.put( LocalTemporaryTableMutationStrategy.DROP_ID_TABLES, "true" ); - ServiceRegistryUtil.applySettings( config ); - // Envers tests expect sequences to not skip values... - config.put( EnversSettings.REVISION_SEQUENCE_NOCACHE, "true" ); - addConfigOptions( config ); - - return config; - } - - @SuppressWarnings("unchecked") - protected void addMappings(Map settings) { - String[] mappings = getMappings(); - if ( mappings != null ) { - settings.put( AvailableSettings.HBM_XML_FILES, String.join( ",", mappings ) ); - } - } - - protected static final String[] NO_MAPPINGS = new String[0]; - - protected String[] getMappings() { - return NO_MAPPINGS; - } - - protected void addConfigOptions(Map options) { - } - - protected static final Class[] NO_CLASSES = new Class[0]; - - protected Class[] getAnnotatedClasses() { - return NO_CLASSES; - } - - public Map getCachedClasses() { - return new HashMap(); - } - - public Map getCachedCollections() { - return new HashMap(); - } - - public String[] getEjb3DD() { - return new String[] {}; - } - - protected void afterEntityManagerFactoryBuilt() { - } - - protected boolean createSchema() { - return true; - } - - /** - * Feature supported only by H2 dialect. - * - * @return Provide not empty name to create second schema. - */ - protected String createSecondSchema() { - return null; - } - - protected boolean autoRegisterListeners() { - return true; - } - - @AfterClassOnce - public void releaseEntityManagerFactory() { - if ( entityManagerFactory != null && entityManagerFactory.isOpen() ) { - entityManagerFactory.close(); - } - } - - @After - @SuppressWarnings("unused") - public void releaseUnclosedEntityManagers() { - releaseUnclosedEntityManager( this.em ); - auditReader = null; - for ( EntityManager isolatedEm : isolatedEms ) { - releaseUnclosedEntityManager( isolatedEm ); - } - } - - private void releaseUnclosedEntityManager(EntityManager em) { - if ( em == null ) { - return; - } - if ( !em.isOpen() ) { - em = null; - return; - } - if ( JtaStatusHelper.isActive( TestingJtaPlatformImpl.INSTANCE.getTransactionManager() ) ) { - log.warn( "Cleaning up unfinished transaction" ); - try { - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().rollback(); - } - catch (SystemException ignored) { - } - } - try { - if ( em.getTransaction().isActive() ) { - em.getTransaction().rollback(); - log.warn( "You left an open transaction! Fix your test case. For now, we are closing it for you." ); - } - } - catch (IllegalStateException e) { - } - if ( em.isOpen() ) { - // as we open an EM before the test runs, it will still be open if the test uses a custom EM. - // or, the person may have forgotten to close. So, do not raise a "fail", but log the fact. - em.close(); - log.warn( "The EntityManager is not closed. Closing it." ); - } - } - - protected EntityManager getEntityManager() { - return getOrCreateEntityManager(); - } - - protected EntityManager getOrCreateEntityManager() { - if ( em == null || !em.isOpen() ) { - em = entityManagerFactory.createEntityManager(); - } - return em; - } - - protected AuditReader getAuditReader() { - if ( auditReader != null ) { - return auditReader; - } - return auditReader = AuditReaderFactory.get( getOrCreateEntityManager() ); - } - - protected EntityManager createIsolatedEntityManager() { - EntityManager isolatedEm = entityManagerFactory.createEntityManager(); - isolatedEms.add( isolatedEm ); - return isolatedEm; - } - - protected EntityManager createIsolatedEntityManager(Map props) { - EntityManager isolatedEm = entityManagerFactory.createEntityManager( props ); - isolatedEms.add( isolatedEm ); - return isolatedEm; - } - - protected EntityManager createEntityManager(Map properties) { - // always reopen a new EM and close the existing one - if ( em != null && em.isOpen() ) { - em.close(); - } - em = entityManagerFactory.createEntityManager( properties ); - return em; - } - - public Configuration getConfiguration() { - final ServiceRegistry serviceRegistry = metadata().getMetadataBuildingOptions().getServiceRegistry(); - return serviceRegistry.getService( EnversService.class ).getConfig(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EnversRunner.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EnversRunner.java deleted file mode 100644 index 22f3d598654a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EnversRunner.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import org.hibernate.testing.envers.RequiresAuditStrategy; -import org.hibernate.testing.junit4.CustomRunner; -import org.hibernate.testing.junit4.Helper; - -import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; -import org.hibernate.envers.strategy.spi.AuditStrategy; -import org.junit.runner.Runner; -import org.junit.runner.manipulation.NoTestsRemainException; -import org.junit.runner.notification.RunNotifier; -import org.junit.runners.Parameterized; -import org.junit.runners.Suite; -import org.junit.runners.model.FrameworkMethod; -import org.junit.runners.model.InitializationError; -import org.junit.runners.model.Statement; -import org.junit.runners.model.TestClass; - -import org.jboss.logging.Logger; - -/** - * Copied & modified from {@link Parameterized}. - *

- * The modification is that the generated runners extend {@link CustomRunner} instead of the default - * {@code TestClassRunnerForParameters}. - *

- * The runner itself sets the data using a setter instead of a constructor, and creates only one test instance. Moreover - * it doesn't override {@code classBlock} which causes the custom {@code @BeforeClassOnce} and {@code @AfterClassOnce} - * annotations to work. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class EnversRunner extends Suite { - - private static final Logger LOG = Logger.getLogger( EnversRunner.class ); - - private class TestClassCustomRunnerForParameters extends CustomRunner { - private final int fParameterSetNumber; - - private final List fParameterList; - - private boolean ignoreAllTests; - - TestClassCustomRunnerForParameters(Class type, List parameterList, int i) - throws InitializationError, NoTestsRemainException { - super( type ); - fParameterList = parameterList; - fParameterSetNumber = i; - } - - @Override - protected Object getTestInstance() throws Exception { - Object testInstance = super.getTestInstance(); - if ( AbstractEnversTest.class.isInstance( testInstance ) ) { - ((AbstractEnversTest) testInstance).setTestData( computeParams() ); - } - else if ( BaseEnversFunctionalTestCase.class.isInstance( testInstance ) ) { - ((BaseEnversFunctionalTestCase) testInstance).setTestData( computeParams() ); - } - return testInstance; - } - - @Override - protected Statement withBeforeClasses(Statement statement) { - if ( !isAuditStrategyAllowed( getTestClass().getAnnotation( RequiresAuditStrategy.class ) ) ) { - LOG.infof( "Required audit strategy not available, test class '%s' skipped.", getTestClass().getName() ); - ignoreAllTests = true; - return statement; - } - return super.withBeforeClasses( statement ); - } - - @Override - protected void runChild(FrameworkMethod method, RunNotifier notifier) { - if ( !isAuditStrategyAllowed( method ) ) { - if ( !ignoreAllTests ) { - LOG.infof( "Required audit strategy not available, test '%s' skipped.", method.getName() ); - } - notifier.fireTestIgnored( describeChild( method ) ); - return; - } - super.runChild( method, notifier ); - } - - private boolean isAuditStrategyAllowed(FrameworkMethod method) { - return isAuditStrategyAllowed( Helper.locateAnnotation( RequiresAuditStrategy.class, method, getTestClass() ) ); - } - - private boolean isAuditStrategyAllowed(RequiresAuditStrategy auditStrategyAnn) { - if ( auditStrategyAnn == null ) { - // if there is no annotation, then execution is permissible - return true; - } - - // if an annotation exists, verify its allowed - final String strategyNameInUse = getStrategyClassSimpleName(); - for ( Class strategy : auditStrategyAnn.value() ) { - if ( strategy.getSimpleName().equals( strategyNameInUse ) ) { - return true; - } - } - return false; - } - - private Object[] computeParams() throws Exception { - try { - return fParameterList.get( fParameterSetNumber ); - } - catch (ClassCastException e) { - throw new Exception( - String.format( - "%s.%s() must return a Collection of arrays.", - getTestClass().getName(), getParametersMethod( - getTestClass() - ).getName() - ) - ); - } - } - - @Override - protected String getName() { - return String.format( "[%s]", fParameterSetNumber ); - } - - @Override - protected String testName(final FrameworkMethod method) { - return String.format( - "%s[%s]", method.getName(), - fParameterSetNumber - ); - } - - private String getStrategyClassSimpleName() { - Object name = fParameterList.get( fParameterSetNumber )[ 0 ]; - if ( name != null ) { - String strategyName = (String) name; - name = strategyName.substring( strategyName.lastIndexOf( "." ) + 1 ); - } - return ( name != null ? name.toString() : DefaultAuditStrategy.class.getSimpleName() ); - } - - @Override - protected void sortMethods(List computedTestMethods) { - super.sortMethods( computedTestMethods ); - Collections.sort( - computedTestMethods, new Comparator() { - private int getPriority(FrameworkMethod fm) { - Priority p = fm.getAnnotation( Priority.class ); - return p == null ? 0 : p.value(); - } - - @Override - public int compare(FrameworkMethod fm1, FrameworkMethod fm2) { - return getPriority( fm2 ) - getPriority( fm1 ); - } - } - ); - } - } - - private final ArrayList runners = new ArrayList(); - - /** - * Only called reflectively. Do not use programmatically. - */ - public EnversRunner(Class klass) throws Throwable { - super( klass, Collections.emptyList() ); - List parametersList = getParametersList( getTestClass() ); - for ( int i = 0; i < parametersList.size(); i++ ) { - runners.add( - new TestClassCustomRunnerForParameters( - getTestClass().getJavaClass(), - parametersList, i - ) - ); - } - } - - @Override - protected List getChildren() { - return runners; - } - - @SuppressWarnings("unchecked") - private List getParametersList(TestClass klass) - throws Throwable { - return (List) getParametersMethod( klass ).invokeExplosively( - null - ); - } - - private FrameworkMethod getParametersMethod(TestClass testClass) - throws Exception { - List methods = testClass.getAnnotatedMethods( Parameterized.Parameters.class ); - - for ( FrameworkMethod each : methods ) { - int modifiers = each.getMethod().getModifiers(); - if ( Modifier.isStatic( modifiers ) && Modifier.isPublic( modifiers ) ) { - return each; - } - } - - throw new Exception( - "No public static parameters method on class " - + testClass.getName() - ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsOneSessionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsOneSessionTest.java deleted file mode 100644 index 6d5f66e00920..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsOneSessionTest.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import org.hibernate.cfg.Configuration; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; - -/** - * Base test for modified flags feature - * - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -// todo (envers-junit): migrate this after AbstractOneSessionTest -public abstract class AbstractModifiedFlagsOneSessionTest extends - AbstractOneSessionTest { - - @Override - protected void addProperties(Configuration configuration) { - super.addProperties( configuration ); - if ( forceModifiedFlags() ) { - configuration.setProperty( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, "true" ); - } - } - - public boolean forceModifiedFlags() { - return true; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractEntityManagerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractEntityManagerTest.java deleted file mode 100644 index 73663f9c4a86..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractEntityManagerTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.util.Arrays; -import java.util.Properties; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.cfg.Environment; -import org.hibernate.dialect.Dialect; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.boot.internal.EnversIntegrator; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl; -import org.hibernate.jpa.boot.spi.Bootstrap; -import org.hibernate.orm.test.envers.AbstractEnversTest; - -import org.hibernate.testing.AfterClassOnce; -import org.hibernate.testing.BeforeClassOnce; -import org.hibernate.testing.orm.jpa.PersistenceUnitDescriptorAdapter; -import org.hibernate.testing.orm.junit.DialectContext; -import org.junit.Before; - -import jakarta.persistence.EntityManager; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public abstract class AbstractEntityManagerTest extends AbstractEnversTest { - public static final Dialect DIALECT = DialectContext.getDialect(); - - private SessionFactoryImplementor emf; - private EntityManager entityManager; - private AuditReader auditReader; - private boolean audited; - - public void addConfigurationProperties(Properties configuration) { - } - - protected static Dialect getDialect() { - return DIALECT; - } - - private void closeEntityManager() { - if ( entityManager != null ) { - entityManager.close(); - entityManager = null; - } - } - - @Before - public void newEntityManager() { - closeEntityManager(); - - entityManager = emf.createEntityManager(); - - if ( audited ) { - auditReader = AuditReaderFactory.get( entityManager ); - } - } - - @BeforeClassOnce - public void init() { - init( true, getAuditStrategy() ); - } - - protected void init(boolean audited, String auditStrategy) { - this.audited = audited; - - Properties configurationProperties = new Properties(); - configurationProperties.putAll( Environment.getProperties() ); - if ( !audited ) { - configurationProperties.setProperty( EnversIntegrator.AUTO_REGISTER, "false" ); - } - if ( createSchema() ) { - configurationProperties.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" ); - configurationProperties.setProperty( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" ); - } - if ( auditStrategy != null && !auditStrategy.isEmpty() ) { - configurationProperties.setProperty( "org.hibernate.envers.audit_strategy", auditStrategy ); - } - - addConfigurationProperties( configurationProperties ); - - configurationProperties.put( AvailableSettings.LOADED_CLASSES, Arrays.asList( getAnnotatedClasses() ) ); - - EntityManagerFactoryBuilderImpl entityManagerFactoryBuilder = - (EntityManagerFactoryBuilderImpl) - Bootstrap.getEntityManagerFactoryBuilder( - new PersistenceUnitDescriptorAdapter(), - configurationProperties - ); - - emf = entityManagerFactoryBuilder.build().unwrap( SessionFactoryImplementor.class ); - - newEntityManager(); - } - - protected Class[] getAnnotatedClasses() { - return new Class[0]; - } - - protected boolean createSchema() { - return true; - } - - @AfterClassOnce - public void close() { - closeEntityManager(); - emf.close(); - //NOTE we don't build the service registry so we don't destroy it - } - - public EntityManager getEntityManager() { - return entityManager; - } - - public AuditReader getAuditReader() { - return auditReader; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractPerformanceTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractPerformanceTest.java deleted file mode 100644 index be05f16df4b1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractPerformanceTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public abstract class AbstractPerformanceTest extends AbstractEntityManagerTest { - protected String getSecondsString(long milliseconds) { - return (milliseconds / 1000) + "." + (milliseconds % 1000); - } - - protected abstract void doTest(); - - private void printResults(long unaudited, long audited) { - System.out.println( "Unaudited: " + getSecondsString( unaudited ) ); - System.out.println( " Audited: " + getSecondsString( audited ) ); - System.out.println( " Delta: " + getSecondsString( audited - unaudited ) ); - System.out.println( " Factor: " + (double) audited / unaudited ); - } - - private long startTime; - private long runTotal; - - protected void start() { - startTime = System.currentTimeMillis(); - } - - protected void stop() { - long stopTime = System.currentTimeMillis(); - runTotal += stopTime - startTime; - } - - protected void reset() { - runTotal = 0; - } - - public long run(int numberOfRuns, List results) { - long total = 0; - for ( int i = 0; i <= numberOfRuns; i++ ) { - System.out.println(); - System.out.println( "RUN " + i ); - reset(); - doTest(); - results.add( runTotal ); - total += runTotal; - - newEntityManager(); - - /*System.gc(); - System.gc(); - System.gc(); - System.out.println(Runtime.getRuntime().freeMemory() + ", " + Runtime.getRuntime().totalMemory() + ", " - + (Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));*/ - } - - return total; - } - - public void test(int numberOfRuns) throws IOException { - List unauditedRuns = new ArrayList(); - List auditedRuns = new ArrayList(); - - init( true, null ); - long audited = run( numberOfRuns, auditedRuns ); - close(); - - init( false, null ); - long unaudited = run( numberOfRuns, unauditedRuns ); - close(); - - for ( int i = 0; i <= numberOfRuns; i++ ) { - System.out.println( "RUN " + i ); - printResults( unauditedRuns.get( i ), auditedRuns.get( i ) ); - System.out.println(); - } - - System.out.println( "TOTAL" ); - printResults( unaudited, audited ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AllPerformance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AllPerformance.java deleted file mode 100644 index d61d1d759769..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AllPerformance.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; - -public class AllPerformance { - public static void main(String[] args) throws IOException { - new InsertsPerformance().test( 10 ); - new ComplexInsertPerformance().test( 10 ); - new UpdatesPerformance().test( 10 ); - new InsertsOneTransactionPerformance().test( 10 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/ComplexInsertPerformance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/ComplexInsertPerformance.java deleted file mode 100644 index 401a796976d9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/ComplexInsertPerformance.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; -import java.util.Date; -import java.util.HashSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.performance.complex.ChildEntity1; -import org.hibernate.orm.test.envers.performance.complex.ChildEntity2; -import org.hibernate.orm.test.envers.performance.complex.RootEntity; - -import org.junit.Ignore; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Ignore -public class ComplexInsertPerformance extends AbstractPerformanceTest { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {RootEntity.class, ChildEntity1.class, ChildEntity2.class}; - } - - private final static int NUMBER_INSERTS = 1000; - - private long idCounter = 0; - - private ChildEntity2 createChildEntity2() { - ChildEntity2 ce = new ChildEntity2(); - ce.setId( idCounter++ ); - ce.setNumber( 12345678 ); - ce.setData( "some data, not really meaningful" ); - ce.setStrings( new HashSet() ); - ce.getStrings().add( "aaa" ); - ce.getStrings().add( "bbb" ); - ce.getStrings().add( "ccc" ); - - return ce; - } - - private ChildEntity1 createChildEntity1() { - ChildEntity1 ce = new ChildEntity1(); - ce.setId( idCounter++ ); - ce.setData1( "xxx" ); - ce.setData2( "yyy" ); - ce.setChild1( createChildEntity2() ); - ce.setChild2( createChildEntity2() ); - - return ce; - } - - protected void doTest() { - for ( int i = 0; i < NUMBER_INSERTS; i++ ) { - newEntityManager(); - EntityManager entityManager = getEntityManager(); - - entityManager.getTransaction().begin(); - - RootEntity re = new RootEntity(); - re.setId( idCounter++ ); - re.setData1( "data1" ); - re.setData2( "data2" ); - re.setDate1( new Date() ); - re.setNumber1( 123 ); - re.setNumber2( 456 ); - re.setChild1( createChildEntity1() ); - re.setChild2( createChildEntity1() ); - re.setChild3( createChildEntity1() ); - - start(); - entityManager.persist( re ); - entityManager.getTransaction().commit(); - stop(); - } - } - - public static void main(String[] args) throws IOException { - ComplexInsertPerformance insertsPerformance = new ComplexInsertPerformance(); - insertsPerformance.test( 3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/EvictAuditDataAfterCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/EvictAuditDataAfterCommitTest.java deleted file mode 100644 index c9cc62b6d5f9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/EvictAuditDataAfterCommitTest.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.engine.spi.PersistenceContext; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; -import org.hibernate.testing.envers.junit.EnversTest; -import org.hibernate.testing.orm.junit.DomainModel; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.orm.junit.SessionFactory; -import org.hibernate.testing.orm.junit.SessionFactoryScope; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.fail; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@DomainModel( - annotatedClasses = { - StrTestEntity.class, SetRefEdEntity.class, SetRefIngEntity.class - } -) -@SessionFactory -@EnversTest -public class EvictAuditDataAfterCommitTest { - - @Test - @JiraKey(value = "HHH-6614") - public void testSessionCacheClear(SessionFactoryScope scope) { - scope.inTransaction( - session -> { - StrTestEntity ste = new StrTestEntity( "data" ); - session.persist( ste ); - } - ); - scope.inSession( - session -> - checkEmptyAuditSessionCache( session, - "org.hibernate.orm.test.envers.entities.StrTestEntity_AUD" ) - ); - } - - @Test - @JiraKey(value = "HHH-6614") - public void testSessionCacheCollectionClear(SessionFactoryScope scope) { - final String[] auditEntityNames = new String[] { - "org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity_AUD", - "org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity_AUD" - }; - - scope.inTransaction( - session -> { - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); - SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2" ); - - session.persist( ed1 ); - session.persist( ed2 ); - session.persist( ing1 ); - session.persist( ing2 ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); - - session.getTransaction().begin(); - ed1 = session.getReference( SetRefEdEntity.class, ed1.getId() ); - ing1.setReference( ed1 ); - ing2.setReference( ed1 ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); - - session.getTransaction().begin(); - ed2 = session.getReference( SetRefEdEntity.class, ed2.getId() ); - Set reffering = new HashSet<>(); - reffering.add( ing1 ); - reffering.add( ing2 ); - ed2.setReffering( reffering ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); - - session.getTransaction().begin(); - ed2 = session.getReference( SetRefEdEntity.class, ed2.getId() ); - ed2.getReffering().remove( ing1 ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); - - session.getTransaction().begin(); - ed2 = session.getReference( SetRefEdEntity.class, ed2.getId() ); - ed2.getReffering().iterator().next().setData( "mod_data_ing_2" ); - checkEmptyAuditSessionCache( session, auditEntityNames ); - } - ); - } - - private void checkEmptyAuditSessionCache(SessionImplementor session, String... auditEntityNames) { - List entityNames = Arrays.asList( auditEntityNames ); - PersistenceContext persistenceContext = session.getPersistenceContext(); - for ( Map.Entry entrySet : persistenceContext.reentrantSafeEntityEntries() ) { - final EntityEntry entityEntry = entrySet.getValue(); - if ( entityNames.contains( entityEntry.getEntityName() ) ) { - fail( "Audit data shall not be stored in the session level cache. This causes performance issues." ); - } - assertThat( entityEntry.getEntityName() ) - .describedAs( - "Revision entity shall not be stored in the session level cache. This causes performance issues." ) - .isNotEqualTo( SequenceIdRevisionEntity.class.getName() ); - } - - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsOneTransactionPerformance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsOneTransactionPerformance.java deleted file mode 100644 index 730675d260d4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsOneTransactionPerformance.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Ignore; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Ignore -public class InsertsOneTransactionPerformance extends AbstractPerformanceTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - private final static int NUMBER_INSERTS = 5000; - - protected void doTest() { - EntityManager entityManager = getEntityManager(); - entityManager.getTransaction().begin(); - start(); - for ( int i = 0; i < NUMBER_INSERTS; i++ ) { - entityManager.persist( new StrTestEntity( "x" + i ) ); - } - entityManager.getTransaction().commit(); - stop(); - } - - public static void main(String[] args) throws IOException { - InsertsOneTransactionPerformance insertsOneTransactionPerformance = new InsertsOneTransactionPerformance(); - insertsOneTransactionPerformance.test( 3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsPerformance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsPerformance.java deleted file mode 100644 index bf5ef8bf468f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsPerformance.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Ignore; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Ignore -public class InsertsPerformance extends AbstractPerformanceTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - private final static int NUMBER_INSERTS = 5000; - - protected void doTest() { - for ( int i = 0; i < NUMBER_INSERTS; i++ ) { - newEntityManager(); - EntityManager entityManager = getEntityManager(); - - entityManager.getTransaction().begin(); - start(); - entityManager.persist( new StrTestEntity( "x" + i ) ); - entityManager.getTransaction().commit(); - stop(); - } - } - - public static void main(String[] args) throws IOException { - InsertsPerformance insertsPerformance = new InsertsPerformance(); - insertsPerformance.test( 3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/UpdatesPerformance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/UpdatesPerformance.java deleted file mode 100644 index 3692ff17a8b0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/UpdatesPerformance.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Ignore; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Ignore -public class UpdatesPerformance extends AbstractPerformanceTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - private final static int NUMBER_UPDATES = 5000; - private final static int NUMBER_ENTITIES = 10; - - private Random random = new Random(); - - private List ids = new ArrayList(); - - private void setup() { - EntityManager entityManager = getEntityManager(); - entityManager.getTransaction().begin(); - - for ( int i = 0; i < NUMBER_ENTITIES; i++ ) { - StrTestEntity testEntity = new StrTestEntity( "x" + i ); - entityManager.persist( testEntity ); - ids.add( testEntity.getId() ); - } - entityManager.getTransaction().commit(); - } - - protected void doTest() { - setup(); - - for ( int i = 0; i < NUMBER_UPDATES; i++ ) { - newEntityManager(); - EntityManager entityManager = getEntityManager(); - - entityManager.getTransaction().begin(); - Integer id = ids.get( random.nextInt( NUMBER_ENTITIES ) ); - start(); - StrTestEntity testEntity = entityManager.find( StrTestEntity.class, id ); - testEntity.setStr( "z" + i ); - entityManager.getTransaction().commit(); - stop(); - } - } - - public static void main(String[] args) throws IOException { - UpdatesPerformance updatesPerformance = new UpdatesPerformance(); - updatesPerformance.test( 3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity1.java deleted file mode 100644 index 7fdc37f9e8d8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity1.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance.complex; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ChildEntity1 { - @Id - private Long id; - - @ManyToOne(cascade = CascadeType.ALL) - private ChildEntity2 child1; - - @ManyToOne(cascade = CascadeType.ALL) - private ChildEntity2 child2; - - private String data1; - - private String data2; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public ChildEntity2 getChild1() { - return child1; - } - - public void setChild1(ChildEntity2 child1) { - this.child1 = child1; - } - - public ChildEntity2 getChild2() { - return child2; - } - - public void setChild2(ChildEntity2 child2) { - this.child2 = child2; - } - - public String getData1() { - return data1; - } - - public void setData1(String data1) { - this.data1 = data1; - } - - public String getData2() { - return data2; - } - - public void setData2(String data2) { - this.data2 = data2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildEntity1) ) { - return false; - } - - ChildEntity1 that = (ChildEntity1) o; - - if ( data1 != null ? !data1.equals( that.data1 ) : that.data1 != null ) { - return false; - } - if ( data2 != null ? !data2.equals( that.data2 ) : that.data2 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data1 != null ? data1.hashCode() : 0); - result = 31 * result + (data2 != null ? data2.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity2.java deleted file mode 100644 index 94653ae72bd1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity2.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance.complex; - -import java.util.Set; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ChildEntity2 { - @Id - private Long id; - - private String data; - - private Integer number; - - @ElementCollection - private Set strings; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Integer getNumber() { - return number; - } - - public void setNumber(Integer number) { - this.number = number; - } - - public Set getStrings() { - return strings; - } - - public void setStrings(Set strings) { - this.strings = strings; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildEntity2) ) { - return false; - } - - ChildEntity2 that = (ChildEntity2) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( number != null ? !number.equals( that.number ) : that.number != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - result = 31 * result + (number != null ? number.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/RootEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/RootEntity.java deleted file mode 100644 index 833a1dd9d111..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/RootEntity.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance.complex; - -import java.util.Date; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class RootEntity { - @Id - private Long id; - - private String data1; - - private String data2; - - private Integer number1; - - private Integer number2; - - @Temporal(TemporalType.TIMESTAMP) - private Date date1; - - @ManyToOne(cascade = CascadeType.ALL) - private ChildEntity1 child1; - - @ManyToOne(cascade = CascadeType.ALL) - private ChildEntity1 child2; - - @ManyToOne(cascade = CascadeType.ALL) - private ChildEntity1 child3; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData1() { - return data1; - } - - public void setData1(String data1) { - this.data1 = data1; - } - - public String getData2() { - return data2; - } - - public void setData2(String data2) { - this.data2 = data2; - } - - public Integer getNumber1() { - return number1; - } - - public void setNumber1(Integer number1) { - this.number1 = number1; - } - - public Integer getNumber2() { - return number2; - } - - public void setNumber2(Integer number2) { - this.number2 = number2; - } - - public Date getDate1() { - return date1; - } - - public void setDate1(Date date1) { - this.date1 = date1; - } - - public ChildEntity1 getChild1() { - return child1; - } - - public void setChild1(ChildEntity1 child1) { - this.child1 = child1; - } - - public ChildEntity1 getChild2() { - return child2; - } - - public void setChild2(ChildEntity1 child2) { - this.child2 = child2; - } - - public ChildEntity1 getChild3() { - return child3; - } - - public void setChild3(ChildEntity1 child3) { - this.child3 = child3; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof RootEntity) ) { - return false; - } - - RootEntity that = (RootEntity) o; - - if ( data1 != null ? !data1.equals( that.data1 ) : that.data1 != null ) { - return false; - } - if ( data2 != null ? !data2.equals( that.data2 ) : that.data2 != null ) { - return false; - } - if ( date1 != null ? !date1.equals( that.date1 ) : that.date1 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( number1 != null ? !number1.equals( that.number1 ) : that.number1 != null ) { - return false; - } - if ( number2 != null ? !number2.equals( that.number2 ) : that.number2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data1 != null ? data1.hashCode() : 0); - result = 31 * result + (data2 != null ? data2.hashCode() : 0); - result = 31 * result + (number1 != null ? number1.hashCode() : 0); - result = 31 * result + (number2 != null ? number2.hashCode() : 0); - result = 31 * result + (date1 != null ? date1.hashCode() : 0); - return result; - } -} From 6527ef5ff0e87fad94a90173b616f4e56d6f547c Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Wed, 12 Nov 2025 11:23:43 +0100 Subject: [PATCH 4/5] HHH-19921 Drop last JUnit 4 usages in Hibernate Envers --- hibernate-envers/hibernate-envers.gradle | 4 ---- 1 file changed, 4 deletions(-) diff --git a/hibernate-envers/hibernate-envers.gradle b/hibernate-envers/hibernate-envers.gradle index 3a1b6e5dde6c..3b056305f555 100644 --- a/hibernate-envers/hibernate-envers.gradle +++ b/hibernate-envers/hibernate-envers.gradle @@ -26,10 +26,6 @@ dependencies { testImplementation project( ':hibernate-testing' ) - // todo : to get rid of these - testImplementation testLibs.junit4 - testImplementation testLibs.junit4Engine - testImplementation project(':hibernate-testing') testAnnotationProcessor project( ':hibernate-processor' ) From f7ba6c928b6f3f72d81872fe814de0c75aaaf954 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Wed, 12 Nov 2025 11:59:55 +0100 Subject: [PATCH 5/5] HHH-19921 Drop last JUnit 4 usages in Hibernate Envers --- hibernate-envers/hibernate-envers.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/hibernate-envers/hibernate-envers.gradle b/hibernate-envers/hibernate-envers.gradle index 3b056305f555..368ec3a61b62 100644 --- a/hibernate-envers/hibernate-envers.gradle +++ b/hibernate-envers/hibernate-envers.gradle @@ -26,8 +26,6 @@ dependencies { testImplementation project( ':hibernate-testing' ) - testImplementation project(':hibernate-testing') - testAnnotationProcessor project( ':hibernate-processor' ) }