4141public 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