HHH-14843 Adding a test for the issue
This commit is contained in:
parent
79f08afc8a
commit
2af37a788f
|
@ -0,0 +1,86 @@
|
||||||
|
package org.hibernate.serialization;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
import java.io.ObjectOutputStream;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.hibernate.cache.internal.DefaultCacheKeysFactory;
|
||||||
|
import org.hibernate.cache.internal.SimpleCacheKeysFactory;
|
||||||
|
import org.hibernate.cache.spi.CacheKeysFactory;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.persister.entity.EntityPersister;
|
||||||
|
import org.hibernate.serialization.entity.BuildRecord;
|
||||||
|
import org.hibernate.serialization.entity.BuildRecordId;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner;
|
||||||
|
import org.hibernate.testing.bytecode.enhancement.EnhancementOptions;
|
||||||
|
import org.hibernate.testing.cache.CachingRegionFactory;
|
||||||
|
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
@RunWith(BytecodeEnhancerRunner.class)
|
||||||
|
@EnhancementOptions(lazyLoading = true, inlineDirtyChecking = true)
|
||||||
|
@TestForIssue( jiraKey = "HHH-14843")
|
||||||
|
public class CacheKeyEmbeddedIdEnanchedTest extends BaseNonConfigCoreFunctionalTestCase {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addSettings(Map settings) {
|
||||||
|
settings.put( Environment.USE_SECOND_LEVEL_CACHE, "true" );
|
||||||
|
settings.put( Environment.CACHE_REGION_FACTORY, CachingRegionFactory.class.getName() );
|
||||||
|
settings.put( Environment.DEFAULT_CACHE_CONCURRENCY_STRATEGY, "transactional" );
|
||||||
|
settings.put( "javax.persistence.sharedCache.mode", "ALL" );
|
||||||
|
settings.put( Environment.CACHE_KEYS_FACTORY, DefaultCacheKeysFactory.INSTANCE.getClass().getName() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?>[] getAnnotatedClasses() {
|
||||||
|
return new Class<?>[] { BuildRecord.class };
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDefaultCacheKeysFactorySerialization() throws Exception {
|
||||||
|
testId( DefaultCacheKeysFactory.INSTANCE, BuildRecord.class.getName(), new BuildRecordId( 2l ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSimpleCacheKeysFactorySerialization() throws Exception {
|
||||||
|
testId( SimpleCacheKeysFactory.INSTANCE, BuildRecord.class.getName(), new BuildRecordId( 2l ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void testId(CacheKeysFactory cacheKeysFactory, String entityName, Object id) throws Exception {
|
||||||
|
final EntityPersister persister = sessionFactory().getMetamodel().entityPersister( entityName );
|
||||||
|
final Object key = cacheKeysFactory.createEntityKey(
|
||||||
|
id,
|
||||||
|
persister,
|
||||||
|
sessionFactory(),
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
final ObjectOutputStream oos = new ObjectOutputStream( baos );
|
||||||
|
oos.writeObject( key );
|
||||||
|
|
||||||
|
final ObjectInputStream ois = new ObjectInputStream( new ByteArrayInputStream( baos.toByteArray() ) );
|
||||||
|
final Object keyClone = ois.readObject();
|
||||||
|
|
||||||
|
assertEquals( key, keyClone );
|
||||||
|
assertEquals( keyClone, key );
|
||||||
|
|
||||||
|
assertEquals( key.hashCode(), keyClone.hashCode() );
|
||||||
|
|
||||||
|
final Object idClone = cacheKeysFactory.getEntityId( keyClone );
|
||||||
|
|
||||||
|
assertEquals( id.hashCode(), idClone.hashCode() );
|
||||||
|
assertEquals( id, idClone );
|
||||||
|
assertEquals( idClone, id );
|
||||||
|
assertTrue( persister.getIdentifierType().isEqual( id, idClone, sessionFactory() ) );
|
||||||
|
assertTrue( persister.getIdentifierType().isEqual( idClone, id, sessionFactory() ) );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package org.hibernate.serialization.entity;
|
||||||
|
|
||||||
|
import javax.persistence.EmbeddedId;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class BuildRecord {
|
||||||
|
|
||||||
|
@EmbeddedId
|
||||||
|
private BuildRecordId id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public BuildRecordId getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(BuildRecordId id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package org.hibernate.serialization.entity;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Objects;
|
||||||
|
import javax.persistence.Embeddable;
|
||||||
|
|
||||||
|
@Embeddable
|
||||||
|
public class BuildRecordId implements Serializable {
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
public BuildRecordId() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public BuildRecordId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if ( this == o ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if ( o == null || getClass() != o.getClass() ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
BuildRecordId longId = (BuildRecordId) o;
|
||||||
|
return id == longId.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash( id );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue