44 */
55package org .hibernate .loader .ast .internal ;
66
7+ import org .hibernate .LockOptions ;
78import org .hibernate .engine .spi .EntityHolder ;
89import org .hibernate .engine .spi .SharedSessionContractImplementor ;
910import org .hibernate .engine .spi .SubselectFetch ;
1011import org .hibernate .query .spi .QueryOptions ;
12+ import org .hibernate .query .spi .QueryOptionsAdapter ;
1113import org .hibernate .sql .exec .internal .BaseExecutionContext ;
1214
1315class 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+ this ( session , subSelectFetchableKeysHandler , false , null );
2225 }
2326
2427 public ExecutionContextWithSubselectFetchHandler (
2528 SharedSessionContractImplementor session ,
2629 SubselectFetch .RegistrationHandler subSelectFetchableKeysHandler ,
27- boolean readOnly ) {
30+ boolean readOnly ,
31+ LockOptions lockOptions ) {
2832 super ( session );
2933 this .subSelectFetchableKeysHandler = subSelectFetchableKeysHandler ;
3034 this .readOnly = readOnly ;
35+ this .queryOptions = determineQueryOptions ( readOnly , lockOptions );
36+ }
37+
38+ private QueryOptions determineQueryOptions (boolean readOnly , LockOptions lockOptions ) {
39+ return new QueryOptionsAdapter () {
40+ @ Override
41+ public Boolean isReadOnly () {
42+ return readOnly ;
43+ }
44+
45+ @ Override
46+ public LockOptions getLockOptions () {
47+ return lockOptions == null ? LockOptions .NONE : lockOptions ;
48+ }
49+ };
3150 }
3251
3352 @ Override
@@ -39,6 +58,6 @@ public void registerLoadingEntityHolder(EntityHolder holder) {
3958
4059 @ Override
4160 public QueryOptions getQueryOptions () {
42- return readOnly ? QueryOptions . READ_ONLY : super . getQueryOptions () ;
61+ return queryOptions ;
4362 }
4463}
0 commit comments