Skip to content

Commit ca1d66f

Browse files
committed
HHH-18992 - fix for issue (addition to fix provided in #9517)
Signed-off-by: Jan Schatteman <[email protected]>
1 parent 7292aac commit ca1d66f

File tree

5 files changed

+32
-6
lines changed

5 files changed

+32
-6
lines changed

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

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,42 @@
44
*/
55
package org.hibernate.loader.ast.internal;
66

7+
import org.hibernate.LockOptions;
78
import org.hibernate.engine.spi.EntityHolder;
89
import org.hibernate.engine.spi.SharedSessionContractImplementor;
910
import org.hibernate.engine.spi.SubselectFetch;
11+
import org.hibernate.query.internal.SimpleQueryOptions;
1012
import org.hibernate.query.spi.QueryOptions;
1113
import org.hibernate.sql.exec.internal.BaseExecutionContext;
1214

1315
class ExecutionContextWithSubselectFetchHandler extends BaseExecutionContext {
1416

1517
private final SubselectFetch.RegistrationHandler subSelectFetchableKeysHandler;
1618
private final boolean readOnly;
19+
private final QueryOptions queryOptions;
1720

1821
public ExecutionContextWithSubselectFetchHandler(
1922
SharedSessionContractImplementor session,
2023
SubselectFetch.RegistrationHandler subSelectFetchableKeysHandler) {
21-
this( session, subSelectFetchableKeysHandler, false );
24+
super( session );
25+
this.subSelectFetchableKeysHandler = subSelectFetchableKeysHandler;
26+
this.readOnly = false;
27+
this.queryOptions = QueryOptions.NONE;
2228
}
2329

2430
public ExecutionContextWithSubselectFetchHandler(
2531
SharedSessionContractImplementor session,
2632
SubselectFetch.RegistrationHandler subSelectFetchableKeysHandler,
27-
boolean readOnly) {
33+
boolean readOnly,
34+
LockOptions lockOptions) {
2835
super( session );
2936
this.subSelectFetchableKeysHandler = subSelectFetchableKeysHandler;
3037
this.readOnly = readOnly;
38+
this.queryOptions = determineQueryOptions( readOnly, lockOptions );
39+
}
40+
41+
private QueryOptions determineQueryOptions(boolean readOnly, LockOptions lockOptions) {
42+
return new SimpleQueryOptions( lockOptions, readOnly ? true : null );
3143
}
3244

3345
@Override
@@ -39,6 +51,11 @@ public void registerLoadingEntityHolder(EntityHolder holder) {
3951

4052
@Override
4153
public QueryOptions getQueryOptions() {
42-
return readOnly ? QueryOptions.READ_ONLY : super.getQueryOptions();
54+
return queryOptions;
55+
}
56+
57+
@Override
58+
public boolean upgradeLocks() {
59+
return true;
4360
}
4461
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ public LockOptions getLockOptions() {
142142
JdbcParametersList.singleton( jdbcParameter ),
143143
jdbcParameterBindings
144144
),
145-
TRUE.equals( loadOptions.getReadOnly( session ) )
145+
TRUE.equals( loadOptions.getReadOnly( session ) ),
146+
lockOptions
146147
),
147148
RowTransformerStandardImpl.instance(),
148149
null,

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,8 @@ public LockOptions getLockOptions() {
173173
new ExecutionContextWithSubselectFetchHandler(
174174
session,
175175
fetchableKeysHandler( session, sqlAst, jdbcParameters, jdbcParameterBindings ),
176-
TRUE.equals( loadOptions.getReadOnly( session ) )
176+
TRUE.equals( loadOptions.getReadOnly( session ) ),
177+
lockOptions
177178
),
178179
RowTransformerStandardImpl.instance(),
179180
null,

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ interface KeyValueResolver {
5151

5252
private final JdbcOperationQuerySelect jdbcSelect;
5353

54+
private final LockOptions lockOptions;
55+
5456
public MultiNaturalIdLoadingBatcher(
5557
EntityMappingType entityDescriptor,
5658
ModelPart restrictedPart,
@@ -88,6 +90,7 @@ public LockOptions getLockOptions() {
8890
return lockOptions;
8991
}
9092
} );
93+
this.lockOptions = lockOptions;
9194
}
9295

9396
public <E> List<E> multiLoad(Object[] naturalIdValues, SharedSessionContractImplementor session) {
@@ -163,7 +166,7 @@ private <E> List<E> performLoad(
163166
return session.getJdbcServices().getJdbcSelectExecutor().list(
164167
jdbcSelect,
165168
jdbcParamBindings,
166-
new ExecutionContextWithSubselectFetchHandler( session, subSelectFetchableKeysHandler ),
169+
new ExecutionContextWithSubselectFetchHandler( session, subSelectFetchableKeysHandler, false, lockOptions ),
167170
RowTransformerStandardImpl.instance(),
168171
null,
169172
ListResultsConsumer.UniqueSemantic.FILTER,

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,8 @@ public void registerLoadingEntityHolder(EntityHolder holder) {
7676
subSelectFetchableKeysHandler.addKey( holder );
7777
}
7878

79+
@Override
80+
public boolean upgradeLocks() {
81+
return true;
82+
}
7983
}

0 commit comments

Comments
 (0)