From aef07759467d89e9fe562d4bbd9385b1fea816fc Mon Sep 17 00:00:00 2001 From: Steve Ebersole Date: Wed, 20 Oct 2021 12:01:11 -0500 Subject: [PATCH] HHH-14877 - FetchMode.SUBSELECT ignored - fixed additional tests --- .../ast/internal/AbstractNaturalIdLoader.java | 6 ++-- .../SingleUniqueKeyEntityLoaderStandard.java | 4 ++- .../result/internal/OutputsImpl.java | 5 ++- .../sql/exec/internal/CallbackNoOp.java | 32 +++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 hibernate-core/src/main/java/org/hibernate/sql/exec/internal/CallbackNoOp.java diff --git a/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractNaturalIdLoader.java b/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractNaturalIdLoader.java index 7326444026..2cddae1bf9 100644 --- a/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractNaturalIdLoader.java +++ b/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractNaturalIdLoader.java @@ -16,7 +16,6 @@ import java.util.function.Consumer; import java.util.function.Function; import org.hibernate.HibernateException; -import org.hibernate.LockMode; import org.hibernate.LockOptions; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.jdbc.spi.JdbcServices; @@ -46,6 +45,7 @@ import org.hibernate.sql.ast.tree.from.TableReference; import org.hibernate.sql.ast.tree.predicate.Predicate; import org.hibernate.sql.ast.tree.select.QuerySpec; import org.hibernate.sql.ast.tree.select.SelectStatement; +import org.hibernate.sql.exec.internal.CallbackImpl; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.Callback; import org.hibernate.sql.exec.spi.ExecutionContext; @@ -219,6 +219,8 @@ public abstract class AbstractNaturalIdLoader implements NaturalIdLoader { jdbcSelect, jdbcParamBindings, new ExecutionContext() { + private final Callback callback = new CallbackImpl(); + @Override public SharedSessionContractImplementor getSession() { return session; @@ -241,7 +243,7 @@ public abstract class AbstractNaturalIdLoader implements NaturalIdLoader { @Override public Callback getCallback() { - throw new UnsupportedOperationException( "Follow-on locking not supported yet" ); + return callback; } }, diff --git a/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/SingleUniqueKeyEntityLoaderStandard.java b/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/SingleUniqueKeyEntityLoaderStandard.java index 7b728b80f7..4abfafe752 100644 --- a/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/SingleUniqueKeyEntityLoaderStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/loader/ast/internal/SingleUniqueKeyEntityLoaderStandard.java @@ -29,6 +29,7 @@ import org.hibernate.sql.ast.Clause; import org.hibernate.sql.ast.SqlAstTranslatorFactory; import org.hibernate.sql.ast.tree.expression.JdbcParameter; import org.hibernate.sql.ast.tree.select.SelectStatement; +import org.hibernate.sql.exec.internal.CallbackImpl; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.Callback; import org.hibernate.sql.exec.spi.ExecutionContext; @@ -102,6 +103,7 @@ public class SingleUniqueKeyEntityLoaderStandard implements SingleUniqueKeyEn jdbcSelect, jdbcParameterBindings, new ExecutionContext() { + private final Callback callback = new CallbackImpl(); @Override public SharedSessionContractImplementor getSession() { return session; @@ -129,7 +131,7 @@ public class SingleUniqueKeyEntityLoaderStandard implements SingleUniqueKeyEn @Override public Callback getCallback() { - throw new UnsupportedOperationException( "Follow-on locking not supported yet" ); + return callback; } }, diff --git a/hibernate-core/src/main/java/org/hibernate/result/internal/OutputsImpl.java b/hibernate-core/src/main/java/org/hibernate/result/internal/OutputsImpl.java index e928f369d9..524fb3e7a8 100644 --- a/hibernate-core/src/main/java/org/hibernate/result/internal/OutputsImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/result/internal/OutputsImpl.java @@ -33,6 +33,7 @@ import org.hibernate.query.spi.QueryParameterBindings; import org.hibernate.result.Output; import org.hibernate.result.Outputs; import org.hibernate.result.spi.ResultContext; +import org.hibernate.sql.exec.internal.CallbackImpl; import org.hibernate.sql.exec.spi.Callback; import org.hibernate.sql.exec.spi.ExecutionContext; import org.hibernate.sql.results.NoMoreOutputsException; @@ -179,6 +180,8 @@ public class OutputsImpl implements Outputs { ); final ExecutionContext executionContext = new ExecutionContext() { + private final Callback callback = new CallbackImpl(); + @Override public SharedSessionContractImplementor getSession() { return OutputsImpl.this.context.getSession(); @@ -206,7 +209,7 @@ public class OutputsImpl implements Outputs { @Override public Callback getCallback() { - throw new UnsupportedOperationException( "Follow-on locking not supported yet" ); + return callback; } }; diff --git a/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/CallbackNoOp.java b/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/CallbackNoOp.java new file mode 100644 index 0000000000..3d9dd1ea92 --- /dev/null +++ b/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/CallbackNoOp.java @@ -0,0 +1,32 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later + * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html + */ +package org.hibernate.sql.exec.internal; + +import org.hibernate.engine.spi.SharedSessionContractImplementor; +import org.hibernate.loader.ast.spi.AfterLoadAction; +import org.hibernate.persister.entity.Loadable; +import org.hibernate.sql.exec.spi.Callback; + +/** + * Implementation of Callback that does nothing + */ +public class CallbackNoOp implements Callback { + /** + * Singleton access + */ + public static final CallbackNoOp NO_OP_CALLBACK = new CallbackNoOp(); + + @Override + public void registerAfterLoadAction(AfterLoadAction afterLoadAction) { + // don't do anything + } + + @Override + public void invokeAfterLoadActions(SharedSessionContractImplementor session, Object entity, Loadable persister) { + // don't do anything + } +}