Skip to content

Commit c7114ce

Browse files
committed
HHH-17689 Cache SQL statement for unique key lookup
1 parent 757452e commit c7114ce

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

hibernate-core/src/main/java/org/hibernate/loader/ast/internal/SingleUniqueKeyEntityLoaderStandard.java

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
public class SingleUniqueKeyEntityLoaderStandard<T> implements SingleUniqueKeyEntityLoader<T> {
4242
private final EntityMappingType entityDescriptor;
4343
private final ModelPart uniqueKeyAttribute;
44+
private final JdbcParametersList jdbcParameters;
45+
private final JdbcOperationQuerySelect jdbcSelect;
4446

4547
public SingleUniqueKeyEntityLoaderStandard(
4648
EntityMappingType entityDescriptor,
@@ -52,23 +54,9 @@ public SingleUniqueKeyEntityLoaderStandard(
5254
else {
5355
this.uniqueKeyAttribute = uniqueKeyAttribute;
5456
}
55-
}
56-
57-
@Override
58-
public EntityMappingType getLoadable() {
59-
return entityDescriptor;
60-
}
61-
62-
@Override
63-
public T load(
64-
Object ukValue,
65-
LockOptions lockOptions,
66-
Boolean readOnly,
67-
SharedSessionContractImplementor session) {
68-
final SessionFactoryImplementor sessionFactory = session.getFactory();
6957

70-
// todo (6.0) : cache the SQL AST and JdbcParameters
71-
JdbcParametersList.Builder builder = JdbcParametersList.newBuilder();
58+
final SessionFactoryImplementor sessionFactory = entityDescriptor.getEntityPersister().getFactory();
59+
final JdbcParametersList.Builder builder = JdbcParametersList.newBuilder();
7260
final SelectStatement sqlAst = LoaderSelectBuilder.createSelectByUniqueKey(
7361
entityDescriptor,
7462
Collections.emptyList(),
@@ -83,7 +71,23 @@ public T load(
8371
final JdbcServices jdbcServices = sessionFactory.getJdbcServices();
8472
final JdbcEnvironment jdbcEnvironment = jdbcServices.getJdbcEnvironment();
8573
final SqlAstTranslatorFactory sqlAstTranslatorFactory = jdbcEnvironment.getSqlAstTranslatorFactory();
86-
JdbcParametersList jdbcParameters = builder.build();
74+
this.jdbcParameters = builder.build();
75+
this.jdbcSelect = sqlAstTranslatorFactory.buildSelectTranslator( sessionFactory, sqlAst )
76+
.translate( JdbcParameterBindings.NO_BINDINGS, QueryOptions.NONE );
77+
}
78+
79+
@Override
80+
public EntityMappingType getLoadable() {
81+
return entityDescriptor;
82+
}
83+
84+
@Override
85+
public T load(
86+
Object ukValue,
87+
LockOptions lockOptions,
88+
Boolean readOnly,
89+
SharedSessionContractImplementor session) {
90+
final SessionFactoryImplementor sessionFactory = session.getFactory();
8791

8892
final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl( jdbcParameters.size() );
8993
int offset = jdbcParameterBindings.registerParametersForEachJdbcValue(
@@ -93,9 +97,6 @@ public T load(
9397
session
9498
);
9599
assert offset == jdbcParameters.size();
96-
final JdbcOperationQuerySelect jdbcSelect = sqlAstTranslatorFactory.buildSelectTranslator( sessionFactory, sqlAst )
97-
.translate( jdbcParameterBindings, QueryOptions.NONE );
98-
99100
final List<Object> list = sessionFactory.getJdbcServices().getJdbcSelectExecutor().list(
100101
jdbcSelect,
101102
jdbcParameterBindings,

0 commit comments

Comments
 (0)