HHH-8260 missing api to register default entity tuplizer
This commit is contained in:
parent
c397221483
commit
390e72e2c1
|
@ -30,6 +30,7 @@ import java.util.Set;
|
|||
import javax.naming.Referenceable;
|
||||
|
||||
import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||
import org.hibernate.cfg.Settings;
|
||||
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
|
||||
import org.hibernate.engine.spi.FilterDefinition;
|
||||
import org.hibernate.metadata.ClassMetadata;
|
||||
|
@ -75,6 +76,7 @@ public interface SessionFactory extends Referenceable, Serializable {
|
|||
public CurrentTenantIdentifierResolver getCurrentTenantIdentifierResolver();
|
||||
public SessionFactoryObserver[] getSessionFactoryObservers();
|
||||
public EntityNameResolver[] getEntityNameResolvers();
|
||||
public Settings getSettings();
|
||||
|
||||
/**
|
||||
* Get the delegate for handling entity-not-found exception conditions.
|
||||
|
|
|
@ -153,6 +153,7 @@ import org.hibernate.tool.hbm2ddl.SchemaExport;
|
|||
import org.hibernate.tool.hbm2ddl.SchemaUpdate;
|
||||
import org.hibernate.tool.hbm2ddl.SchemaValidator;
|
||||
import org.hibernate.tuple.entity.EntityTuplizer;
|
||||
import org.hibernate.tuple.entity.EntityTuplizerFactory;
|
||||
import org.hibernate.type.AssociationType;
|
||||
import org.hibernate.type.Type;
|
||||
import org.hibernate.type.TypeResolver;
|
||||
|
@ -224,7 +225,7 @@ public final class SessionFactoryImpl
|
|||
final Configuration cfg,
|
||||
Mapping mapping,
|
||||
final ServiceRegistry serviceRegistry,
|
||||
Settings settings,
|
||||
final Settings settings,
|
||||
final SessionFactoryObserver userObserver) throws HibernateException {
|
||||
LOG.debug( "Building session factory" );
|
||||
|
||||
|
@ -273,6 +274,11 @@ public final class SessionFactoryImpl
|
|||
return interceptor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Settings getSettings() {
|
||||
return settings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomEntityDirtinessStrategy getCustomEntityDirtinessStrategy() {
|
||||
return customEntityDirtinessStrategy;
|
||||
|
@ -301,7 +307,7 @@ public final class SessionFactoryImpl
|
|||
}
|
||||
};
|
||||
|
||||
this.settings = settings;
|
||||
this.settings = sessionFactoryOptions.getSettings();
|
||||
|
||||
this.properties = new Properties();
|
||||
this.properties.putAll( cfg.getProperties() );
|
||||
|
@ -515,6 +521,11 @@ public final class SessionFactoryImpl
|
|||
registerEntityNameResolvers( persister );
|
||||
|
||||
}
|
||||
if ( sessionFactoryOptions.getEntityNameResolvers() != null ) {
|
||||
for ( EntityNameResolver resolver : sessionFactoryOptions.getEntityNameResolvers() ) {
|
||||
registerEntityNameResolver( resolver );
|
||||
}
|
||||
}
|
||||
iter = collectionPersisters.values().iterator();
|
||||
while ( iter.hasNext() ) {
|
||||
final CollectionPersister persister = ( ( CollectionPersister ) iter.next() );
|
||||
|
@ -693,12 +704,7 @@ public final class SessionFactoryImpl
|
|||
this.properties = createPropertiesFromMap(
|
||||
metadata.getServiceRegistry().getService( ConfigurationService.class ).getSettings()
|
||||
);
|
||||
|
||||
// TODO: these should be moved into SessionFactoryOptions
|
||||
this.settings = new SettingsFactory().buildSettings(
|
||||
properties,
|
||||
metadata.getServiceRegistry()
|
||||
);
|
||||
this.settings = sessionFactoryOptions.getSettings();
|
||||
|
||||
this.serviceRegistry =
|
||||
sessionFactoryOptions.getServiceRegistry()
|
||||
|
@ -953,6 +959,11 @@ public final class SessionFactoryImpl
|
|||
registerEntityNameResolvers( persister );
|
||||
|
||||
}
|
||||
if ( sessionFactoryOptions.getEntityNameResolvers() != null ) {
|
||||
for ( EntityNameResolver resolver : sessionFactoryOptions.getEntityNameResolvers() ) {
|
||||
registerEntityNameResolver( resolver );
|
||||
}
|
||||
}
|
||||
iter = collectionPersisters.values().iterator();
|
||||
while ( iter.hasNext() ) {
|
||||
final CollectionPersister persister = ( ( CollectionPersister ) iter.next() );
|
||||
|
|
|
@ -24,12 +24,14 @@
|
|||
package org.hibernate.metamodel;
|
||||
|
||||
import org.hibernate.CustomEntityDirtinessStrategy;
|
||||
import org.hibernate.EntityMode;
|
||||
import org.hibernate.EntityNameResolver;
|
||||
import org.hibernate.Interceptor;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.SessionFactoryObserver;
|
||||
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
|
||||
import org.hibernate.proxy.EntityNotFoundDelegate;
|
||||
import org.hibernate.tuple.entity.EntityTuplizer;
|
||||
|
||||
/**
|
||||
* The contract for building a {@link SessionFactory} given a number of options.
|
||||
|
@ -104,6 +106,16 @@ public interface SessionFactoryBuilder {
|
|||
*/
|
||||
public SessionFactoryBuilder with(EntityNotFoundDelegate entityNotFoundDelegate);
|
||||
|
||||
/**
|
||||
* Register the default {@link EntityTuplizer} to be applied to the SessionFactory.
|
||||
*
|
||||
* @param entityMode The entity mode that which this tuplizer will be applied.
|
||||
* @param tuplizerClass The custom tuplizer class.
|
||||
*
|
||||
* @return {@code this}, for method chaining
|
||||
*/
|
||||
public SessionFactoryBuilder with(EntityMode entityMode, Class<? extends EntityTuplizer> tuplizerClass);
|
||||
|
||||
/**
|
||||
* After all options have been set, build the SessionFactory.
|
||||
*
|
||||
|
|
|
@ -28,9 +28,11 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.hibernate.CustomEntityDirtinessStrategy;
|
||||
import org.hibernate.EmptyInterceptor;
|
||||
import org.hibernate.EntityMode;
|
||||
import org.hibernate.EntityNameResolver;
|
||||
import org.hibernate.Interceptor;
|
||||
import org.hibernate.ObjectNotFoundException;
|
||||
|
@ -39,6 +41,8 @@ import org.hibernate.SessionFactoryObserver;
|
|||
import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||
import org.hibernate.boot.registry.selector.spi.StrategySelector;
|
||||
import org.hibernate.cfg.AvailableSettings;
|
||||
import org.hibernate.cfg.Settings;
|
||||
import org.hibernate.cfg.SettingsFactory;
|
||||
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
|
||||
import org.hibernate.engine.config.spi.ConfigurationService;
|
||||
import org.hibernate.internal.DefaultCustomEntityDirtinessStrategy;
|
||||
|
@ -46,6 +50,7 @@ import org.hibernate.internal.SessionFactoryImpl;
|
|||
import org.hibernate.metamodel.SessionFactoryBuilder;
|
||||
import org.hibernate.metamodel.spi.MetadataImplementor;
|
||||
import org.hibernate.proxy.EntityNotFoundDelegate;
|
||||
import org.hibernate.tuple.entity.EntityTuplizer;
|
||||
|
||||
/**
|
||||
* @author Gail Badner
|
||||
|
@ -96,6 +101,12 @@ public class SessionFactoryBuilderImpl implements SessionFactoryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SessionFactoryBuilder with(EntityMode entityMode, Class<? extends EntityTuplizer> tuplizerClass){
|
||||
this.options.settings.getEntityTuplizerFactory().registerDefaultTuplizerClass( entityMode, tuplizerClass );
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SessionFactory build() {
|
||||
return new SessionFactoryImpl( metadata, options );
|
||||
|
@ -110,6 +121,7 @@ public class SessionFactoryBuilderImpl implements SessionFactoryBuilder {
|
|||
private List<SessionFactoryObserver> sessionFactoryObserverList = new ArrayList<SessionFactoryObserver>();
|
||||
private List<EntityNameResolver> entityNameResolvers = new ArrayList<EntityNameResolver>();
|
||||
private EntityNotFoundDelegate entityNotFoundDelegate;
|
||||
private Settings settings;
|
||||
|
||||
public SessionFactoryOptionsImpl(StandardServiceRegistry serviceRegistry) {
|
||||
this.serviceRegistry = serviceRegistry;
|
||||
|
@ -141,6 +153,9 @@ public class SessionFactoryBuilderImpl implements SessionFactoryBuilder {
|
|||
CurrentTenantIdentifierResolver.class,
|
||||
configurationSettings.get( AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER )
|
||||
);
|
||||
Properties properties = new Properties();
|
||||
properties.putAll( configurationSettings );
|
||||
this.settings = new SettingsFactory().buildSettings( properties, serviceRegistry );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -163,6 +178,11 @@ public class SessionFactoryBuilderImpl implements SessionFactoryBuilder {
|
|||
return currentTenantIdentifierResolver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Settings getSettings() {
|
||||
return settings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SessionFactoryObserver[] getSessionFactoryObservers() {
|
||||
return sessionFactoryObserverList.toArray( new SessionFactoryObserver[sessionFactoryObserverList.size()] );
|
||||
|
|
|
@ -31,12 +31,12 @@ import org.hibernate.EntityMode;
|
|||
import org.hibernate.Hibernate;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.cfg.Configuration;
|
||||
import org.hibernate.metamodel.SessionFactoryBuilder;
|
||||
import org.hibernate.test.dynamicentity.Address;
|
||||
import org.hibernate.test.dynamicentity.Company;
|
||||
import org.hibernate.test.dynamicentity.Customer;
|
||||
import org.hibernate.test.dynamicentity.Person;
|
||||
import org.hibernate.test.dynamicentity.ProxyHelper;
|
||||
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
@ -65,10 +65,13 @@ public class ImprovedTuplizerDynamicEntityTest extends BaseCoreFunctionalTestCas
|
|||
super.configure( cfg );
|
||||
cfg.getEntityTuplizerFactory().registerDefaultTuplizerClass( EntityMode.POJO, MyEntityTuplizer.class );
|
||||
}
|
||||
@Override
|
||||
protected void configSessionFactoryBuilder(SessionFactoryBuilder sessionFactoryBuilder) {
|
||||
sessionFactoryBuilder.with( EntityMode.POJO, MyEntityTuplizer.class );
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings( {"unchecked"})
|
||||
@FailureExpectedWithNewMetamodel
|
||||
public void testIt() {
|
||||
// Test saving these dyna-proxies
|
||||
Session session = openSession();
|
||||
|
|
Loading…
Reference in New Issue