HHH-17442 Add test
This commit is contained in:
parent
a3342ec233
commit
52526cd155
|
@ -0,0 +1,88 @@
|
|||
package org.hibernate.orm.test.envers.integration.strategy;
|
||||
|
||||
import jakarta.persistence.EntityManager;
|
||||
import org.hibernate.FlushMode;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.engine.internal.StatisticalLoggingSessionEventListener;
|
||||
import org.hibernate.engine.spi.SessionImplementor;
|
||||
import org.hibernate.envers.configuration.EnversSettings;
|
||||
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
||||
import org.hibernate.orm.test.envers.entities.collection.EmbeddableListEntity1;
|
||||
import org.hibernate.orm.test.envers.entities.components.Component3;
|
||||
import org.hibernate.orm.test.envers.entities.components.Component4;
|
||||
import org.hibernate.testing.orm.junit.JiraKey;
|
||||
import org.hibernate.testing.transaction.TransactionUtil;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests that the ValidityAuditStrategy does not trigger partial flushes when inserting an entity owning
|
||||
* an ElementCollection and when FlushMode is AUTO.
|
||||
*
|
||||
* @author Vincent Stradiot
|
||||
*/
|
||||
@JiraKey("HHH-17442")
|
||||
public class ValidityAuditStrategyPartialFlushCountTest extends BaseEnversJPAFunctionalTestCase {
|
||||
|
||||
private final AtomicInteger partialFlushEntityCount = new AtomicInteger();
|
||||
private final AtomicInteger partialFlushCollectionCount = new AtomicInteger();
|
||||
|
||||
@Override
|
||||
protected Class<?>[] getAnnotatedClasses() {
|
||||
return new Class[] {EmbeddableListEntity1.class};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addConfigOptions(Map options) {
|
||||
options.put( EnversSettings.AUDIT_STRATEGY, "org.hibernate.envers.strategy.ValidityAuditStrategy" );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPartialFlushCount() {
|
||||
TransactionUtil.doInJPA(this::entityManagerFactory, entityManager -> {
|
||||
|
||||
givenHibernateFlushModeAuto(entityManager);
|
||||
recordPartialFlushCount(entityManager);
|
||||
|
||||
final Component3 c3_1 = new Component3(
|
||||
"str1_1",
|
||||
new Component4("key_1", "value_1", "descr_1"),
|
||||
new Component4("key_2", "value_2", "descr_2"));
|
||||
final Component3 c3_2 = new Component3(
|
||||
"str1_2",
|
||||
new Component4("key_3", "value_3", "descr_3"),
|
||||
new Component4("key_4", "value_4", "descr_4"));
|
||||
|
||||
final EmbeddableListEntity1 el = new EmbeddableListEntity1();
|
||||
el.setOtherData("other_data");
|
||||
el.setComponentList(List.of(c3_1, c3_2));
|
||||
|
||||
entityManager.persist(el);
|
||||
});
|
||||
|
||||
assertThat(partialFlushEntityCount.get()).isZero();
|
||||
assertThat(partialFlushCollectionCount.get()).isZero();
|
||||
}
|
||||
|
||||
private void givenHibernateFlushModeAuto(final EntityManager entityManager) {
|
||||
entityManager.unwrap(Session.class).setHibernateFlushMode(FlushMode.AUTO);
|
||||
}
|
||||
|
||||
private void recordPartialFlushCount(final EntityManager entityManager) {
|
||||
entityManager.unwrap(SessionImplementor.class).getEventListenerManager().addListener(new StatisticalLoggingSessionEventListener() {
|
||||
|
||||
@Override
|
||||
public void partialFlushEnd(final int numberOfEntities, final int numberOfCollections) {
|
||||
super.partialFlushEnd(numberOfEntities, numberOfCollections);
|
||||
partialFlushEntityCount.getAndAdd(numberOfEntities);
|
||||
partialFlushCollectionCount.getAndAdd(numberOfCollections);
|
||||
}
|
||||
|
||||
} );
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue