HHH-10418 : test case
This commit is contained in:
parent
40bbc56063
commit
33f8957474
|
@ -0,0 +1,233 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
|
*/
|
||||||
|
package org.hibernate.test.cache.infinispan.functional;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.persistence.ElementCollection;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
import org.hibernate.Hibernate;
|
||||||
|
import org.hibernate.annotations.Cache;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
import org.hibernate.cache.internal.DefaultCacheKeysFactory;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.stat.SecondLevelCacheStatistics;
|
||||||
|
import org.hibernate.stat.Statistics;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Gail Badner
|
||||||
|
*/
|
||||||
|
public class EntitiesAndCollectionsInSameRegionTest extends SingleNodeTest {
|
||||||
|
private static final String REGION_NAME = "ARegion";
|
||||||
|
|
||||||
|
private final AnEntity anEntity;
|
||||||
|
private final AnotherEntity anotherEntity;
|
||||||
|
|
||||||
|
public EntitiesAndCollectionsInSameRegionTest() {
|
||||||
|
anEntity = new AnEntity();
|
||||||
|
anEntity.id = 1;
|
||||||
|
anEntity.values.add( "abc" );
|
||||||
|
|
||||||
|
anotherEntity = new AnotherEntity();
|
||||||
|
anotherEntity.id = 1;
|
||||||
|
anotherEntity.values.add( 123 );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Object[]> getParameters() {
|
||||||
|
return getParameters( true, false, false, false );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class[] getAnnotatedClasses() {
|
||||||
|
return new Class[] {
|
||||||
|
AnEntity.class,
|
||||||
|
AnotherEntity.class
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
protected void addSettings(Map settings) {
|
||||||
|
super.addSettings( settings );
|
||||||
|
settings.put( Environment.CACHE_KEYS_FACTORY, DefaultCacheKeysFactory.SHORT_NAME );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() throws Exception {
|
||||||
|
|
||||||
|
final Statistics stats = sessionFactory().getStatistics();
|
||||||
|
stats.clear();
|
||||||
|
|
||||||
|
withTxSession(
|
||||||
|
s -> {
|
||||||
|
s.persist( anEntity );
|
||||||
|
s.persist( anotherEntity );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Then entities should have been cached, but not their collections.
|
||||||
|
SecondLevelCacheStatistics cacheStatistics = stats.getSecondLevelCacheStatistics( REGION_NAME );
|
||||||
|
assertEquals( 0, cacheStatistics.getMissCount() );
|
||||||
|
assertEquals( 0, cacheStatistics.getHitCount() );
|
||||||
|
assertEquals( 2, cacheStatistics.getPutCount() );
|
||||||
|
|
||||||
|
stats.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void cleanup() throws Exception{
|
||||||
|
withTxSession(
|
||||||
|
s -> {
|
||||||
|
s.delete( s.get( AnEntity.class, 1 ) );
|
||||||
|
s.delete( s.get( AnotherEntity.class, 1 ) );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "HHH-10418")
|
||||||
|
public void testEntitiesAndCollections() throws Exception {
|
||||||
|
|
||||||
|
final Statistics stats = sessionFactory().getStatistics();
|
||||||
|
stats.clear();
|
||||||
|
|
||||||
|
withTxSession(
|
||||||
|
s -> {
|
||||||
|
AnEntity anEntity1 = s.get( AnEntity.class, anEntity.id );
|
||||||
|
|
||||||
|
SecondLevelCacheStatistics cacheStatistics = stats.getSecondLevelCacheStatistics( REGION_NAME );
|
||||||
|
|
||||||
|
// anEntity1 was cached when it was persisted
|
||||||
|
assertEquals( 0, cacheStatistics.getMissCount() );
|
||||||
|
assertEquals( 1, cacheStatistics.getHitCount() );
|
||||||
|
assertEquals( 0, cacheStatistics.getPutCount() );
|
||||||
|
|
||||||
|
stats.clear();
|
||||||
|
|
||||||
|
assertFalse( Hibernate.isInitialized( anEntity1.values ) );
|
||||||
|
Hibernate.initialize( anEntity1.values );
|
||||||
|
|
||||||
|
// anEntity1.values gets cached when it gets loadead
|
||||||
|
cacheStatistics = stats.getSecondLevelCacheStatistics( REGION_NAME );
|
||||||
|
assertEquals( 1, cacheStatistics.getMissCount() );
|
||||||
|
assertEquals( 0, cacheStatistics.getHitCount() );
|
||||||
|
assertEquals( 1, cacheStatistics.getPutCount() );
|
||||||
|
|
||||||
|
stats.clear();
|
||||||
|
|
||||||
|
AnotherEntity anotherEntity1 = s.get( AnotherEntity.class, anotherEntity.id );
|
||||||
|
|
||||||
|
// anotherEntity1 was cached when it was persisted
|
||||||
|
cacheStatistics = stats.getSecondLevelCacheStatistics( REGION_NAME );
|
||||||
|
assertEquals( 0, cacheStatistics.getMissCount() );
|
||||||
|
assertEquals( 1, cacheStatistics.getHitCount() );
|
||||||
|
assertEquals( 0, cacheStatistics.getPutCount() );
|
||||||
|
|
||||||
|
stats.clear();
|
||||||
|
|
||||||
|
assertFalse( Hibernate.isInitialized( anotherEntity1.values ) );
|
||||||
|
Hibernate.initialize( anotherEntity1.values );
|
||||||
|
|
||||||
|
// anotherEntity1.values gets cached when it gets loadead
|
||||||
|
cacheStatistics = stats.getSecondLevelCacheStatistics( REGION_NAME );
|
||||||
|
assertEquals( 1, cacheStatistics.getMissCount() );
|
||||||
|
assertEquals( 0, cacheStatistics.getHitCount() );
|
||||||
|
assertEquals( 1, cacheStatistics.getPutCount() );
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// The entities and their collections should all be cached now.
|
||||||
|
|
||||||
|
withTxSession(
|
||||||
|
s -> {
|
||||||
|
|
||||||
|
stats.clear();
|
||||||
|
|
||||||
|
AnEntity anEntity1 = s.get( AnEntity.class, anEntity.id );
|
||||||
|
|
||||||
|
SecondLevelCacheStatistics cacheStatistics = stats.getSecondLevelCacheStatistics( REGION_NAME );
|
||||||
|
|
||||||
|
assertEquals( 0, cacheStatistics.getMissCount() );
|
||||||
|
assertEquals( 1, cacheStatistics.getHitCount() );
|
||||||
|
assertEquals( 0, cacheStatistics.getPutCount() );
|
||||||
|
|
||||||
|
stats.clear();
|
||||||
|
|
||||||
|
assertFalse( Hibernate.isInitialized( anEntity1.values ) );
|
||||||
|
Hibernate.initialize( anEntity1.values );
|
||||||
|
|
||||||
|
cacheStatistics = stats.getSecondLevelCacheStatistics( REGION_NAME );
|
||||||
|
assertEquals( 0, cacheStatistics.getMissCount() );
|
||||||
|
assertEquals( 1, cacheStatistics.getHitCount() );
|
||||||
|
assertEquals( 0, cacheStatistics.getPutCount() );
|
||||||
|
|
||||||
|
assertEquals( anEntity.values, anEntity1.values );
|
||||||
|
|
||||||
|
stats.clear();
|
||||||
|
|
||||||
|
AnotherEntity anotherEntity1 = s.get( AnotherEntity.class, anotherEntity.id );
|
||||||
|
|
||||||
|
cacheStatistics = stats.getSecondLevelCacheStatistics( REGION_NAME );
|
||||||
|
assertEquals( 0, cacheStatistics.getMissCount() );
|
||||||
|
assertEquals( 1, cacheStatistics.getHitCount() );
|
||||||
|
assertEquals( 0, cacheStatistics.getPutCount() );
|
||||||
|
|
||||||
|
stats.clear();
|
||||||
|
|
||||||
|
assertFalse( Hibernate.isInitialized( anotherEntity1.values ) );
|
||||||
|
Hibernate.initialize( anotherEntity1.values );
|
||||||
|
|
||||||
|
cacheStatistics = stats.getSecondLevelCacheStatistics( REGION_NAME );
|
||||||
|
assertEquals( 0, cacheStatistics.getMissCount() );
|
||||||
|
assertEquals( 1, cacheStatistics.getHitCount() );
|
||||||
|
assertEquals( 0, cacheStatistics.getPutCount() );
|
||||||
|
|
||||||
|
assertEquals( anotherEntity.values, anotherEntity1.values );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "AnEntity")
|
||||||
|
@Cache( usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = REGION_NAME)
|
||||||
|
public static class AnEntity {
|
||||||
|
@Id
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@ElementCollection
|
||||||
|
@Cache( usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = REGION_NAME)
|
||||||
|
private Set<String> values = new HashSet<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "AnotherEntity")
|
||||||
|
@Cache( usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = REGION_NAME)
|
||||||
|
public static class AnotherEntity {
|
||||||
|
@Id
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@ElementCollection
|
||||||
|
@Cache( usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = REGION_NAME)
|
||||||
|
private Set<Integer> values = new HashSet<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue