HHH-7491 fix test failures caused by natural id cache access strategy is not exposed to the persister

This commit is contained in:
Strong Liu 2012-07-31 04:03:14 +08:00
parent 887c6539d2
commit 60aad81c23
8 changed files with 46 additions and 20 deletions

View File

@ -75,11 +75,6 @@ public class SequenceIdentityGenerator
return new Delegate( persister, dialect, getSequenceName() );
}
@Override
public void configure(Type type, Properties params, Dialect dialect) throws MappingException {
super.configure( type, params, dialect );
}
public static class Delegate extends AbstractReturningDelegate {
private final Dialect dialect;
private final String sequenceNextValFragment;

View File

@ -42,6 +42,8 @@ import org.hibernate.internal.util.config.ConfigurationHelper;
import org.hibernate.metamodel.spi.relational.Database;
import org.hibernate.metamodel.spi.relational.Identifier;
import org.hibernate.metamodel.spi.relational.ObjectName;
import org.hibernate.metamodel.spi.relational.Schema;
import org.hibernate.metamodel.spi.relational.Sequence;
import org.hibernate.type.Type;
/**
@ -378,7 +380,7 @@ public class SequenceStyleGenerator
@Override
public void registerExportables(Database database) {
//To change body of implemented methods use File | Settings | File Templates.
databaseStructure.registerExportables( database );
}
@Override

View File

@ -837,7 +837,7 @@ public final class SessionFactoryImpl
}
}
EntityPersister cp = serviceRegistry.getService( PersisterFactory.class ).createEntityPersister(
model, accessStrategy, this, metadata
model, accessStrategy,naturalIdAccessStrategy, this, metadata
);
entityPersisters.put( model.getEntity().getName(), cp );
classMeta.put( model.getEntity().getName(), cp.getClassMetadata() );

View File

@ -139,13 +139,14 @@ public final class PersisterFactoryImpl implements PersisterFactory, ServiceRegi
@SuppressWarnings( {"unchecked"})
public EntityPersister createEntityPersister(EntityBinding metadata,
EntityRegionAccessStrategy cacheAccessStrategy,
NaturalIdRegionAccessStrategy naturalIdRegionAccessStrategy,
SessionFactoryImplementor factory,
Mapping cfg) {
Class<? extends EntityPersister> persisterClass = metadata.getCustomEntityPersisterClass();
if ( persisterClass == null ) {
persisterClass = serviceRegistry.getService( PersisterClassResolver.class ).getEntityPersisterClass( metadata );
}
return create( persisterClass, ENTITY_PERSISTER_CONSTRUCTOR_ARGS_NEW, metadata, cacheAccessStrategy, null, factory, cfg );
return create( persisterClass, ENTITY_PERSISTER_CONSTRUCTOR_ARGS_NEW, metadata, cacheAccessStrategy, naturalIdRegionAccessStrategy, factory, cfg );
}
// TODO: change metadata arg type to EntityBinding when new metadata is integrated

View File

@ -89,6 +89,7 @@ public interface PersisterFactory extends Service {
public EntityPersister createEntityPersister(
EntityBinding model,
EntityRegionAccessStrategy cacheAccessStrategy,
NaturalIdRegionAccessStrategy naturalIdAccessStrategy,
SessionFactoryImplementor factory,
Mapping cfg) throws HibernateException;

View File

@ -249,7 +249,7 @@ public class RevisionInfoConfiguration {
}
public RevisionInfoConfigurationResult configure(Configuration cfg, ReflectionManager reflectionManager) {
Iterator<PersistentClass> classes = (Iterator<PersistentClass>) cfg.getClassMappings();
Iterator<PersistentClass> classes = cfg.getClassMappings();
boolean revisionEntityFound = false;
RevisionInfoGenerator revisionInfoGenerator = null;

View File

@ -35,6 +35,8 @@ import org.hibernate.internal.CoreMessageLogger;
import org.hibernate.internal.util.config.ConfigurationHelper;
import org.hibernate.metamodel.spi.source.MetadataImplementor;
import org.hibernate.service.classloading.spi.ClassLoaderService;
import org.hibernate.service.config.spi.ConfigurationService;
import org.hibernate.service.config.spi.StandardConverters;
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
/**
@ -63,14 +65,7 @@ public class EnversIntegrator implements Integrator {
final AuditConfiguration enversConfiguration = AuditConfiguration.getFor( configuration, serviceRegistry.getService( ClassLoaderService.class ) );
if (enversConfiguration.getEntCfg().hasAuditedEntities()) {
listenerRegistry.appendListeners( EventType.POST_DELETE, new EnversPostDeleteEventListenerImpl( enversConfiguration ) );
listenerRegistry.appendListeners( EventType.POST_INSERT, new EnversPostInsertEventListenerImpl( enversConfiguration ) );
listenerRegistry.appendListeners( EventType.POST_UPDATE, new EnversPostUpdateEventListenerImpl( enversConfiguration ) );
listenerRegistry.appendListeners( EventType.POST_COLLECTION_RECREATE, new EnversPostCollectionRecreateEventListenerImpl( enversConfiguration ) );
listenerRegistry.appendListeners( EventType.PRE_COLLECTION_REMOVE, new EnversPreCollectionRemoveEventListenerImpl( enversConfiguration ) );
listenerRegistry.appendListeners( EventType.PRE_COLLECTION_UPDATE, new EnversPreCollectionUpdateEventListenerImpl( enversConfiguration ) );
}
appendListeners( listenerRegistry, enversConfiguration );
}
@Override
@ -87,6 +82,29 @@ public class EnversIntegrator implements Integrator {
public void integrate( MetadataImplementor metadata,
SessionFactoryImplementor sessionFactory,
SessionFactoryServiceRegistry serviceRegistry ) {
// TODO: implement
final ConfigurationService configurationService = serviceRegistry.getService( ConfigurationService.class );
final boolean autoRegister = configurationService.getSetting( AUTO_REGISTER, StandardConverters.BOOLEAN, true );
if ( !autoRegister ) {
LOG.debug( "Skipping Envers listener auto registration" );
return;
}
EventListenerRegistry listenerRegistry = serviceRegistry.getService( EventListenerRegistry.class );
listenerRegistry.addDuplicationStrategy( EnversListenerDuplicationStrategy.INSTANCE );
// final AuditConfiguration enversConfiguration = AuditConfiguration.getFor( configuration, serviceRegistry.getService( ClassLoaderService.class ) );
//
// appendListeners( listenerRegistry, enversConfiguration );
}
private void appendListeners(EventListenerRegistry listenerRegistry, AuditConfiguration enversConfiguration) {
if (enversConfiguration.getEntCfg().hasAuditedEntities()) {
listenerRegistry.appendListeners( EventType.POST_DELETE, new EnversPostDeleteEventListenerImpl( enversConfiguration ) );
listenerRegistry.appendListeners( EventType.POST_INSERT, new EnversPostInsertEventListenerImpl( enversConfiguration ) );
listenerRegistry.appendListeners( EventType.POST_UPDATE, new EnversPostUpdateEventListenerImpl( enversConfiguration ) );
listenerRegistry.appendListeners( EventType.POST_COLLECTION_RECREATE, new EnversPostCollectionRecreateEventListenerImpl( enversConfiguration ) );
listenerRegistry.appendListeners( EventType.PRE_COLLECTION_REMOVE, new EnversPreCollectionRemoveEventListenerImpl( enversConfiguration ) );
listenerRegistry.appendListeners( EventType.PRE_COLLECTION_UPDATE, new EnversPreCollectionUpdateEventListenerImpl( enversConfiguration ) );
}
}
}

View File

@ -277,8 +277,17 @@ public class BasicTransactionalTestCase extends AbstractFunctionalTestCase {
CacheEntry entry = (CacheEntry) slcs.getEntries().get( i.getId() );
Serializable[] ser = entry.getDisassembledState();
Assert.assertEquals( "widget", ser[0] );
assertEquals( "A bog standard item", ser[1] );
boolean foundFirstOne = false;
boolean foundSecondOne = false;
for(Serializable serializable : ser){
if("widget".equals( serializable )){
foundFirstOne = true;
}
if("A bog standard item".equals( serializable )){
foundSecondOne = true;
}
}
Assert.assertTrue(foundFirstOne && foundSecondOne);
beginTx();
try {