HHH-10313 - Make SessionImplementor extend WrapperOptions
This commit is contained in:
parent
59a5a88dbd
commit
052aad0ed4
|
@ -39,6 +39,7 @@ import org.hibernate.collection.spi.PersistentCollection;
|
|||
import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess;
|
||||
import org.hibernate.engine.jdbc.spi.JdbcCoordinator;
|
||||
import org.hibernate.engine.query.spi.sql.NativeSQLQuerySpecification;
|
||||
import org.hibernate.internal.WrapperOptionsImpl;
|
||||
import org.hibernate.jdbc.ReturningWork;
|
||||
import org.hibernate.jdbc.Work;
|
||||
import org.hibernate.loader.custom.CustomQuery;
|
||||
|
@ -46,6 +47,8 @@ import org.hibernate.persister.entity.EntityPersister;
|
|||
import org.hibernate.procedure.ProcedureCall;
|
||||
import org.hibernate.resource.transaction.TransactionCoordinator;
|
||||
import org.hibernate.stat.SessionStatistics;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.WrapperOptionsContext;
|
||||
|
||||
/**
|
||||
* This class is meant to be extended.
|
||||
|
@ -57,7 +60,7 @@ import org.hibernate.stat.SessionStatistics;
|
|||
*
|
||||
* @author Sanne Grinovero <sanne@hibernate.org> (C) 2012 Red Hat Inc.
|
||||
*/
|
||||
public class SessionDelegatorBaseImpl implements SessionImplementor, Session {
|
||||
public class SessionDelegatorBaseImpl implements SessionImplementor, Session, WrapperOptionsContext {
|
||||
|
||||
protected final SessionImplementor sessionImplementor;
|
||||
protected final Session session;
|
||||
|
@ -766,4 +769,17 @@ public class SessionDelegatorBaseImpl implements SessionImplementor, Session {
|
|||
public void addEventListeners(SessionEventListener... listeners) {
|
||||
session.addEventListeners( listeners );
|
||||
}
|
||||
|
||||
@Override
|
||||
public WrapperOptions getWrapperOptions() {
|
||||
if ( sessionImplementor instanceof WrapperOptionsContext ) {
|
||||
return ( (WrapperOptionsContext) sessionImplementor ).getWrapperOptions();
|
||||
}
|
||||
else if ( session instanceof WrapperOptionsContext ) {
|
||||
return ( (WrapperOptionsContext) session ).getWrapperOptions();
|
||||
}
|
||||
else {
|
||||
return new WrapperOptionsImpl( sessionImplementor );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,6 +57,8 @@ import org.hibernate.resource.transaction.TransactionCoordinatorBuilder;
|
|||
import org.hibernate.resource.transaction.TransactionCoordinatorBuilder.TransactionCoordinatorOptions;
|
||||
import org.hibernate.resource.transaction.spi.TransactionStatus;
|
||||
import org.hibernate.service.ServiceRegistry;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.WrapperOptionsContext;
|
||||
|
||||
/**
|
||||
* Functionality common to stateless and stateful sessions
|
||||
|
@ -64,12 +66,14 @@ import org.hibernate.service.ServiceRegistry;
|
|||
* @author Gavin King
|
||||
*/
|
||||
public abstract class AbstractSessionImpl
|
||||
implements Serializable, SharedSessionContract, SessionImplementor, JdbcSessionOwner, TransactionCoordinatorOptions {
|
||||
implements Serializable, SharedSessionContract, SessionImplementor, JdbcSessionOwner, TransactionCoordinatorOptions, WrapperOptionsContext {
|
||||
|
||||
protected transient SessionFactoryImpl factory;
|
||||
private final String tenantIdentifier;
|
||||
private boolean closed;
|
||||
|
||||
protected transient Transaction currentHibernateTransaction;
|
||||
protected transient WrapperOptionsImpl wrapperOptions;
|
||||
|
||||
protected AbstractSessionImpl(SessionFactoryImpl factory, String tenantIdentifier) {
|
||||
this.factory = factory;
|
||||
|
@ -589,4 +593,12 @@ public abstract class AbstractSessionImpl
|
|||
return factory.getServiceRegistry().getService( TransactionCoordinatorBuilder.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public WrapperOptions getWrapperOptions() {
|
||||
if ( wrapperOptions == null ) {
|
||||
wrapperOptions = new WrapperOptionsImpl( this );
|
||||
}
|
||||
|
||||
return wrapperOptions;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* 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.internal;
|
||||
|
||||
import org.hibernate.Hibernate;
|
||||
import org.hibernate.cfg.Environment;
|
||||
import org.hibernate.engine.jdbc.LobCreator;
|
||||
import org.hibernate.engine.spi.SessionImplementor;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class WrapperOptionsImpl implements WrapperOptions {
|
||||
private final SessionImplementor session;
|
||||
|
||||
private final boolean useStreamForLobBinding;
|
||||
|
||||
public WrapperOptionsImpl(SessionImplementor session) {
|
||||
this.session = session;
|
||||
|
||||
this.useStreamForLobBinding = Environment.useStreamsForBinary()
|
||||
|| session.getFactory().getDialect().useInputStreamToInsertBlob();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useStreamForLobBinding() {
|
||||
return useStreamForLobBinding;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LobCreator getLobCreator() {
|
||||
return Hibernate.getLobCreator( session );
|
||||
}
|
||||
|
||||
@Override
|
||||
public SqlTypeDescriptor remapSqlTypeDescriptor(SqlTypeDescriptor sqlTypeDescriptor) {
|
||||
final SqlTypeDescriptor remapped = sqlTypeDescriptor.canBeRemapped()
|
||||
? session.getFactory().getDialect().remapSqlTypeDescriptor( sqlTypeDescriptor )
|
||||
: sqlTypeDescriptor;
|
||||
return remapped == null ? sqlTypeDescriptor : remapped;
|
||||
}
|
||||
}
|
|
@ -13,23 +13,20 @@ import java.sql.ResultSet;
|
|||
import java.sql.SQLException;
|
||||
import java.util.Map;
|
||||
|
||||
import org.hibernate.Hibernate;
|
||||
import org.hibernate.HibernateException;
|
||||
import org.hibernate.MappingException;
|
||||
import org.hibernate.cfg.Environment;
|
||||
import org.hibernate.engine.jdbc.LobCreator;
|
||||
import org.hibernate.engine.jdbc.Size;
|
||||
import org.hibernate.engine.spi.Mapping;
|
||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
import org.hibernate.engine.spi.SessionImplementor;
|
||||
import org.hibernate.internal.WrapperOptionsImpl;
|
||||
import org.hibernate.internal.util.collections.ArrayHelper;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.WrapperOptionsContext;
|
||||
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
|
||||
import org.hibernate.type.descriptor.java.MutabilityPlan;
|
||||
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
|
||||
|
||||
import org.dom4j.Node;
|
||||
|
||||
/**
|
||||
* Convenience base class for {@link BasicType} implementations
|
||||
*
|
||||
|
@ -354,24 +351,11 @@ public abstract class AbstractStandardBasicType<T>
|
|||
return remapSqlTypeDescriptor( options ).getExtractor( javaTypeDescriptor ).extract( statement, paramNames, options );
|
||||
}
|
||||
|
||||
// TODO : have SessionImplementor extend WrapperOptions
|
||||
private WrapperOptions getOptions(final SessionImplementor session) {
|
||||
return new WrapperOptions() {
|
||||
public boolean useStreamForLobBinding() {
|
||||
return Environment.useStreamsForBinary()
|
||||
|| session.getFactory().getDialect().useInputStreamToInsertBlob();
|
||||
if ( session instanceof WrapperOptionsContext ) {
|
||||
return ( (WrapperOptionsContext) session ).getWrapperOptions();
|
||||
}
|
||||
|
||||
public LobCreator getLobCreator() {
|
||||
return Hibernate.getLobCreator( session );
|
||||
}
|
||||
|
||||
public SqlTypeDescriptor remapSqlTypeDescriptor(SqlTypeDescriptor sqlTypeDescriptor) {
|
||||
final SqlTypeDescriptor remapped = sqlTypeDescriptor.canBeRemapped()
|
||||
? session.getFactory().getDialect().remapSqlTypeDescriptor( sqlTypeDescriptor )
|
||||
: sqlTypeDescriptor;
|
||||
return remapped == null ? sqlTypeDescriptor : remapped;
|
||||
}
|
||||
};
|
||||
return new WrapperOptionsImpl( session );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* 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.type.descriptor;
|
||||
|
||||
/**
|
||||
* Defines the context for {@link WrapperOptions}
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public interface WrapperOptionsContext {
|
||||
/**
|
||||
* Obtain the WrapperOptions for this context.
|
||||
*
|
||||
* @return The WrapperOptions
|
||||
*/
|
||||
WrapperOptions getWrapperOptions();
|
||||
}
|
Loading…
Reference in New Issue