HHH-17689 Cache SQL statement for unique key lookup
This commit is contained in:
parent
757452ef43
commit
c7114ce442
|
@ -41,6 +41,8 @@ import org.hibernate.sql.results.spi.ListResultsConsumer;
|
||||||
public class SingleUniqueKeyEntityLoaderStandard<T> implements SingleUniqueKeyEntityLoader<T> {
|
public class SingleUniqueKeyEntityLoaderStandard<T> implements SingleUniqueKeyEntityLoader<T> {
|
||||||
private final EntityMappingType entityDescriptor;
|
private final EntityMappingType entityDescriptor;
|
||||||
private final ModelPart uniqueKeyAttribute;
|
private final ModelPart uniqueKeyAttribute;
|
||||||
|
private final JdbcParametersList jdbcParameters;
|
||||||
|
private final JdbcOperationQuerySelect jdbcSelect;
|
||||||
|
|
||||||
public SingleUniqueKeyEntityLoaderStandard(
|
public SingleUniqueKeyEntityLoaderStandard(
|
||||||
EntityMappingType entityDescriptor,
|
EntityMappingType entityDescriptor,
|
||||||
|
@ -52,6 +54,26 @@ public class SingleUniqueKeyEntityLoaderStandard<T> implements SingleUniqueKeyEn
|
||||||
else {
|
else {
|
||||||
this.uniqueKeyAttribute = uniqueKeyAttribute;
|
this.uniqueKeyAttribute = uniqueKeyAttribute;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final SessionFactoryImplementor sessionFactory = entityDescriptor.getEntityPersister().getFactory();
|
||||||
|
final JdbcParametersList.Builder builder = JdbcParametersList.newBuilder();
|
||||||
|
final SelectStatement sqlAst = LoaderSelectBuilder.createSelectByUniqueKey(
|
||||||
|
entityDescriptor,
|
||||||
|
Collections.emptyList(),
|
||||||
|
uniqueKeyAttribute,
|
||||||
|
null,
|
||||||
|
LoadQueryInfluencers.NONE,
|
||||||
|
LockOptions.NONE,
|
||||||
|
builder::add,
|
||||||
|
sessionFactory
|
||||||
|
);
|
||||||
|
|
||||||
|
final JdbcServices jdbcServices = sessionFactory.getJdbcServices();
|
||||||
|
final JdbcEnvironment jdbcEnvironment = jdbcServices.getJdbcEnvironment();
|
||||||
|
final SqlAstTranslatorFactory sqlAstTranslatorFactory = jdbcEnvironment.getSqlAstTranslatorFactory();
|
||||||
|
this.jdbcParameters = builder.build();
|
||||||
|
this.jdbcSelect = sqlAstTranslatorFactory.buildSelectTranslator( sessionFactory, sqlAst )
|
||||||
|
.translate( JdbcParameterBindings.NO_BINDINGS, QueryOptions.NONE );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -67,24 +89,6 @@ public class SingleUniqueKeyEntityLoaderStandard<T> implements SingleUniqueKeyEn
|
||||||
SharedSessionContractImplementor session) {
|
SharedSessionContractImplementor session) {
|
||||||
final SessionFactoryImplementor sessionFactory = session.getFactory();
|
final SessionFactoryImplementor sessionFactory = session.getFactory();
|
||||||
|
|
||||||
// todo (6.0) : cache the SQL AST and JdbcParameters
|
|
||||||
JdbcParametersList.Builder builder = JdbcParametersList.newBuilder();
|
|
||||||
final SelectStatement sqlAst = LoaderSelectBuilder.createSelectByUniqueKey(
|
|
||||||
entityDescriptor,
|
|
||||||
Collections.emptyList(),
|
|
||||||
uniqueKeyAttribute,
|
|
||||||
null,
|
|
||||||
LoadQueryInfluencers.NONE,
|
|
||||||
LockOptions.NONE,
|
|
||||||
builder::add,
|
|
||||||
sessionFactory
|
|
||||||
);
|
|
||||||
|
|
||||||
final JdbcServices jdbcServices = sessionFactory.getJdbcServices();
|
|
||||||
final JdbcEnvironment jdbcEnvironment = jdbcServices.getJdbcEnvironment();
|
|
||||||
final SqlAstTranslatorFactory sqlAstTranslatorFactory = jdbcEnvironment.getSqlAstTranslatorFactory();
|
|
||||||
JdbcParametersList jdbcParameters = builder.build();
|
|
||||||
|
|
||||||
final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl( jdbcParameters.size() );
|
final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl( jdbcParameters.size() );
|
||||||
int offset = jdbcParameterBindings.registerParametersForEachJdbcValue(
|
int offset = jdbcParameterBindings.registerParametersForEachJdbcValue(
|
||||||
ukValue,
|
ukValue,
|
||||||
|
@ -93,9 +97,6 @@ public class SingleUniqueKeyEntityLoaderStandard<T> implements SingleUniqueKeyEn
|
||||||
session
|
session
|
||||||
);
|
);
|
||||||
assert offset == jdbcParameters.size();
|
assert offset == jdbcParameters.size();
|
||||||
final JdbcOperationQuerySelect jdbcSelect = sqlAstTranslatorFactory.buildSelectTranslator( sessionFactory, sqlAst )
|
|
||||||
.translate( jdbcParameterBindings, QueryOptions.NONE );
|
|
||||||
|
|
||||||
final List<Object> list = sessionFactory.getJdbcServices().getJdbcSelectExecutor().list(
|
final List<Object> list = sessionFactory.getJdbcServices().getJdbcSelectExecutor().list(
|
||||||
jdbcSelect,
|
jdbcSelect,
|
||||||
jdbcParameterBindings,
|
jdbcParameterBindings,
|
||||||
|
|
Loading…
Reference in New Issue