41
41
public class SingleUniqueKeyEntityLoaderStandard <T > implements SingleUniqueKeyEntityLoader <T > {
42
42
private final EntityMappingType entityDescriptor ;
43
43
private final ModelPart uniqueKeyAttribute ;
44
+ private final JdbcParametersList jdbcParameters ;
45
+ private final JdbcOperationQuerySelect jdbcSelect ;
44
46
45
47
public SingleUniqueKeyEntityLoaderStandard (
46
48
EntityMappingType entityDescriptor ,
@@ -52,23 +54,9 @@ public SingleUniqueKeyEntityLoaderStandard(
52
54
else {
53
55
this .uniqueKeyAttribute = uniqueKeyAttribute ;
54
56
}
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 ();
69
57
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 ();
72
60
final SelectStatement sqlAst = LoaderSelectBuilder .createSelectByUniqueKey (
73
61
entityDescriptor ,
74
62
Collections .emptyList (),
@@ -83,7 +71,23 @@ public T load(
83
71
final JdbcServices jdbcServices = sessionFactory .getJdbcServices ();
84
72
final JdbcEnvironment jdbcEnvironment = jdbcServices .getJdbcEnvironment ();
85
73
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 ();
87
91
88
92
final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl ( jdbcParameters .size () );
89
93
int offset = jdbcParameterBindings .registerParametersForEachJdbcValue (
@@ -93,9 +97,6 @@ public T load(
93
97
session
94
98
);
95
99
assert offset == jdbcParameters .size ();
96
- final JdbcOperationQuerySelect jdbcSelect = sqlAstTranslatorFactory .buildSelectTranslator ( sessionFactory , sqlAst )
97
- .translate ( jdbcParameterBindings , QueryOptions .NONE );
98
-
99
100
final List <Object > list = sessionFactory .getJdbcServices ().getJdbcSelectExecutor ().list (
100
101
jdbcSelect ,
101
102
jdbcParameterBindings ,
0 commit comments