From bc3eb0e7615358f4eb77f0845d365e1a6907dbae Mon Sep 17 00:00:00 2001 From: Gavin King Date: Fri, 9 May 2025 21:53:06 +0200 Subject: [PATCH 1/3] HHH-19438 move OutputableType to org.hibernate.type we're trying to clean up org.hibernate.Query --- .../metamodel/model/domain/BasicDomainType.java | 2 +- .../procedure/internal/FunctionReturnImpl.java | 2 +- .../PostgreSQLCallableStatementSupport.java | 2 +- .../procedure/internal/ProcedureCallImpl.java | 2 +- .../procedure/internal/ProcedureParameterImpl.java | 2 +- .../java/org/hibernate/query/SelectionQuery.java | 14 +++++++------- .../exec/internal/JdbcCallFunctionReturnImpl.java | 2 +- .../internal/JdbcCallParameterExtractorImpl.java | 2 +- .../JdbcCallParameterRegistrationImpl.java | 2 +- .../exec/spi/JdbcCallParameterRegistration.java | 2 +- .../hibernate/{query => type}/OutputableType.java | 3 ++- .../type/ProcedureParameterExtractionAware.java | 6 ++---- 12 files changed, 20 insertions(+), 21 deletions(-) rename hibernate-core/src/main/java/org/hibernate/{query => type}/OutputableType.java (97%) diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/BasicDomainType.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/BasicDomainType.java index b9d893848801..3db8f6e1a2f7 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/BasicDomainType.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/BasicDomainType.java @@ -6,7 +6,7 @@ import jakarta.persistence.metamodel.BasicType; -import org.hibernate.query.OutputableType; +import org.hibernate.type.OutputableType; /** * Hibernate extension to the JPA {@link BasicType} contract. diff --git a/hibernate-core/src/main/java/org/hibernate/procedure/internal/FunctionReturnImpl.java b/hibernate-core/src/main/java/org/hibernate/procedure/internal/FunctionReturnImpl.java index a7510fa175be..ced2938499ac 100644 --- a/hibernate-core/src/main/java/org/hibernate/procedure/internal/FunctionReturnImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/procedure/internal/FunctionReturnImpl.java @@ -11,7 +11,7 @@ import org.hibernate.procedure.spi.NamedCallableQueryMemento; import org.hibernate.procedure.spi.ProcedureCallImplementor; import org.hibernate.query.BindableType; -import org.hibernate.query.OutputableType; +import org.hibernate.type.OutputableType; import org.hibernate.sql.exec.internal.JdbcCallFunctionReturnImpl.RefCurserJdbcCallFunctionReturnImpl; import org.hibernate.sql.exec.internal.JdbcCallFunctionReturnImpl.RegularJdbcCallFunctionReturnImpl; import org.hibernate.sql.exec.internal.JdbcCallParameterExtractorImpl; diff --git a/hibernate-core/src/main/java/org/hibernate/procedure/internal/PostgreSQLCallableStatementSupport.java b/hibernate-core/src/main/java/org/hibernate/procedure/internal/PostgreSQLCallableStatementSupport.java index d10e29c5d429..4a0b94ecdf64 100644 --- a/hibernate-core/src/main/java/org/hibernate/procedure/internal/PostgreSQLCallableStatementSupport.java +++ b/hibernate-core/src/main/java/org/hibernate/procedure/internal/PostgreSQLCallableStatementSupport.java @@ -11,7 +11,7 @@ import org.hibernate.procedure.spi.FunctionReturnImplementor; import org.hibernate.procedure.spi.ProcedureCallImplementor; import org.hibernate.procedure.spi.ProcedureParameterImplementor; -import org.hibernate.query.OutputableType; +import org.hibernate.type.OutputableType; import org.hibernate.query.spi.ProcedureParameterMetadataImplementor; import org.hibernate.sql.exec.internal.JdbcCallImpl; import org.hibernate.sql.exec.spi.JdbcCallParameterRegistration; diff --git a/hibernate-core/src/main/java/org/hibernate/procedure/internal/ProcedureCallImpl.java b/hibernate-core/src/main/java/org/hibernate/procedure/internal/ProcedureCallImpl.java index 30f2072285e3..9adf56e0862a 100644 --- a/hibernate-core/src/main/java/org/hibernate/procedure/internal/ProcedureCallImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/procedure/internal/ProcedureCallImpl.java @@ -44,7 +44,7 @@ import org.hibernate.query.BindableType; import org.hibernate.query.KeyedPage; import org.hibernate.query.KeyedResultList; -import org.hibernate.query.OutputableType; +import org.hibernate.type.OutputableType; import org.hibernate.query.Query; import org.hibernate.query.QueryParameter; import org.hibernate.query.internal.QueryOptionsImpl; diff --git a/hibernate-core/src/main/java/org/hibernate/procedure/internal/ProcedureParameterImpl.java b/hibernate-core/src/main/java/org/hibernate/procedure/internal/ProcedureParameterImpl.java index 5b42a6b27a35..a933b160214d 100644 --- a/hibernate-core/src/main/java/org/hibernate/procedure/internal/ProcedureParameterImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/procedure/internal/ProcedureParameterImpl.java @@ -15,7 +15,7 @@ import org.hibernate.procedure.spi.ProcedureCallImplementor; import org.hibernate.procedure.spi.ProcedureParameterImplementor; import org.hibernate.query.BindableType; -import org.hibernate.query.OutputableType; +import org.hibernate.type.OutputableType; import org.hibernate.query.internal.BindingTypeHelper; import org.hibernate.query.spi.AbstractQueryParameter; import org.hibernate.query.spi.QueryParameterBinding; diff --git a/hibernate-core/src/main/java/org/hibernate/query/SelectionQuery.java b/hibernate-core/src/main/java/org/hibernate/query/SelectionQuery.java index e4d29510aa52..eda176efed59 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/SelectionQuery.java +++ b/hibernate-core/src/main/java/org/hibernate/query/SelectionQuery.java @@ -16,6 +16,7 @@ import jakarta.persistence.CacheRetrieveMode; import jakarta.persistence.CacheStoreMode; import jakarta.persistence.EntityGraph; + import org.hibernate.CacheMode; import org.hibernate.FlushMode; import org.hibernate.Incubating; @@ -27,13 +28,11 @@ import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.UnknownProfileException; -import org.hibernate.dialect.Dialect; import jakarta.persistence.FlushModeType; import jakarta.persistence.LockModeType; import jakarta.persistence.Parameter; import jakarta.persistence.TemporalType; -import org.hibernate.engine.profile.DefaultFetchProfile; import org.hibernate.graph.GraphSemantic; /** @@ -95,9 +94,10 @@ * *

* The special built-in fetch profile named - * {@value DefaultFetchProfile#HIBERNATE_DEFAULT_PROFILE} adds a fetch join for - * every {@link jakarta.persistence.FetchType#EAGER eager} {@code @ManyToOne} or - * {@code @OneToOne} association belonging to an entity returned by the query. + * {@value org.hibernate.engine.profile.DefaultFetchProfile#HIBERNATE_DEFAULT_PROFILE} + * adds a fetch join for every {@link jakarta.persistence.FetchType#EAGER eager} + * {@code @ManyToOne} or {@code @OneToOne} association belonging to an entity + * returned by the query. *

* Finally, three alternative approaches to pagination are available: *

    @@ -146,8 +146,8 @@ default List getResultList() { /** * Returns scrollable access to the query results, using the - * {@linkplain Dialect#defaultScrollMode() default scroll mode - * of the SQL dialect.} + * {@linkplain org.hibernate.dialect.Dialect#defaultScrollMode + * default scroll mode of the SQL dialect.} * * @see #scroll(ScrollMode) */ diff --git a/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallFunctionReturnImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallFunctionReturnImpl.java index cdb10f2570fa..967b59b32f81 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallFunctionReturnImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallFunctionReturnImpl.java @@ -4,7 +4,7 @@ */ package org.hibernate.sql.exec.internal; -import org.hibernate.query.OutputableType; +import org.hibernate.type.OutputableType; import org.hibernate.sql.exec.spi.JdbcCallFunctionReturn; import jakarta.persistence.ParameterMode; diff --git a/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallParameterExtractorImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallParameterExtractorImpl.java index a30556a74543..0e780740b7d5 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallParameterExtractorImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallParameterExtractorImpl.java @@ -8,7 +8,7 @@ import java.sql.SQLException; import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.query.OutputableType; +import org.hibernate.type.OutputableType; import org.hibernate.sql.exec.spi.JdbcCallParameterExtractor; /** diff --git a/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallParameterRegistrationImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallParameterRegistrationImpl.java index 7c9c448cb153..d131b188dd22 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallParameterRegistrationImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/exec/internal/JdbcCallParameterRegistrationImpl.java @@ -9,7 +9,7 @@ import org.hibernate.engine.jdbc.cursor.spi.RefCursorSupport; import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.query.OutputableType; +import org.hibernate.type.OutputableType; import org.hibernate.sql.exec.spi.JdbcCallParameterExtractor; import org.hibernate.sql.exec.spi.JdbcCallParameterRegistration; import org.hibernate.sql.exec.spi.JdbcParameterBinder; diff --git a/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/JdbcCallParameterRegistration.java b/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/JdbcCallParameterRegistration.java index 84c9564d6f39..2449d52524e1 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/JdbcCallParameterRegistration.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/exec/spi/JdbcCallParameterRegistration.java @@ -8,7 +8,7 @@ import jakarta.persistence.ParameterMode; import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.query.OutputableType; +import org.hibernate.type.OutputableType; import org.hibernate.sql.exec.internal.JdbcCallRefCursorExtractorImpl; /** diff --git a/hibernate-core/src/main/java/org/hibernate/query/OutputableType.java b/hibernate-core/src/main/java/org/hibernate/type/OutputableType.java similarity index 97% rename from hibernate-core/src/main/java/org/hibernate/query/OutputableType.java rename to hibernate-core/src/main/java/org/hibernate/type/OutputableType.java index 25c8bdbb5cd2..158c1177be87 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/OutputableType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/OutputableType.java @@ -2,13 +2,14 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.query; +package org.hibernate.type; import java.sql.CallableStatement; import java.sql.SQLException; import org.hibernate.Incubating; import org.hibernate.engine.spi.SharedSessionContractImplementor; +import org.hibernate.query.BindableType; import org.hibernate.type.descriptor.jdbc.JdbcType; /** diff --git a/hibernate-core/src/main/java/org/hibernate/type/ProcedureParameterExtractionAware.java b/hibernate-core/src/main/java/org/hibernate/type/ProcedureParameterExtractionAware.java index 907934480adf..0079c5ee3a15 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/ProcedureParameterExtractionAware.java +++ b/hibernate-core/src/main/java/org/hibernate/type/ProcedureParameterExtractionAware.java @@ -4,11 +4,9 @@ */ package org.hibernate.type; -import org.hibernate.query.OutputableType; - /** - * Optional {@link Type} contract for implementations that are aware of how to extract values from - * store procedure OUT/INOUT parameters. + * Optional {@link Type} contract for implementations that are aware of + * how to extract values from stored procedure OUT/INOUT parameters. * * @author Steve Ebersole */ From 36fec8bb96eae518e7595c11640536544173b126 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Fri, 9 May 2025 22:10:44 +0200 Subject: [PATCH 2/3] HHH-19442 move NameableQuery down to ProcedureCallImplementor --- .../main/java/org/hibernate/procedure/ProcedureCall.java | 7 +------ .../hibernate/procedure/spi/ProcedureCallImplementor.java | 5 ++++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/procedure/ProcedureCall.java b/hibernate-core/src/main/java/org/hibernate/procedure/ProcedureCall.java index 733194a04f53..3879031af7c7 100644 --- a/hibernate-core/src/main/java/org/hibernate/procedure/ProcedureCall.java +++ b/hibernate-core/src/main/java/org/hibernate/procedure/ProcedureCall.java @@ -16,10 +16,8 @@ import org.hibernate.MappingException; import org.hibernate.query.SynchronizeableQuery; -import org.hibernate.procedure.spi.NamedCallableQueryMemento; import org.hibernate.query.CommonQueryContract; import org.hibernate.query.procedure.ProcedureParameter; -import org.hibernate.query.named.NameableQuery; import org.hibernate.type.BasicTypeReference; /** @@ -56,7 +54,7 @@ * @author Steve Ebersole */ public interface ProcedureCall - extends CommonQueryContract, SynchronizeableQuery, StoredProcedureQuery, NameableQuery, AutoCloseable { + extends CommonQueryContract, SynchronizeableQuery, StoredProcedureQuery, AutoCloseable { /** * The hint key (for use with JPA's "hint system") indicating the function's return JDBC type code * (aka, {@link java.sql.Types} code) @@ -246,9 +244,6 @@ default void close() { @Override ProcedureCall addSynchronizedEntityClass(@SuppressWarnings("rawtypes") Class entityClass) throws MappingException; - @Override - NamedCallableQueryMemento toMemento(String name); - @Override ProcedureCall setHint(String hintName, Object value); diff --git a/hibernate-core/src/main/java/org/hibernate/procedure/spi/ProcedureCallImplementor.java b/hibernate-core/src/main/java/org/hibernate/procedure/spi/ProcedureCallImplementor.java index 17ec506dec18..5bb60b94bce1 100644 --- a/hibernate-core/src/main/java/org/hibernate/procedure/spi/ProcedureCallImplementor.java +++ b/hibernate-core/src/main/java/org/hibernate/procedure/spi/ProcedureCallImplementor.java @@ -9,6 +9,7 @@ import java.util.List; import org.hibernate.procedure.ProcedureCall; +import org.hibernate.query.named.NameableQuery; import org.hibernate.query.spi.ProcedureParameterMetadataImplementor; import org.hibernate.query.spi.QueryImplementor; import org.hibernate.type.BasicTypeReference; @@ -23,7 +24,7 @@ /** * @author Steve Ebersole */ -public interface ProcedureCallImplementor extends ProcedureCall, QueryImplementor { +public interface ProcedureCallImplementor extends ProcedureCall, NameableQuery, QueryImplementor { @Override default List getResultList() { return list(); @@ -93,4 +94,6 @@ default List getResultList() { @Override ProcedureCallImplementor registerStoredProcedureParameter(String parameterName, Class type, ParameterMode mode); + @Override + NamedCallableQueryMemento toMemento(String name); } From d7b6ccd7ccc22ffa7136d6cdc2929cb0c346094b Mon Sep 17 00:00:00 2001 From: Gavin King Date: Fri, 9 May 2025 22:17:09 +0200 Subject: [PATCH 3/3] deprecate obsolete hint 'hibernate.procedure.function_return_jdbc_type_code' --- .../org/hibernate/procedure/ProcedureCall.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/procedure/ProcedureCall.java b/hibernate-core/src/main/java/org/hibernate/procedure/ProcedureCall.java index 3879031af7c7..7301cd92580a 100644 --- a/hibernate-core/src/main/java/org/hibernate/procedure/ProcedureCall.java +++ b/hibernate-core/src/main/java/org/hibernate/procedure/ProcedureCall.java @@ -30,10 +30,7 @@ *

    * Unless explicitly specified, the ProcedureCall is assumed to follow the * procedure call syntax. To explicitly specify that this should be a function - * call, use {@link #markAsFunctionCall}. JPA users could either:

      - *
    • use {@code storedProcedureQuery.unwrap( ProcedureCall.class }.markAsFunctionCall()
    • - *
    • set the {@link #FUNCTION_RETURN_TYPE_HINT} hint (avoids casting to Hibernate-specific classes)
    • - *
    + * call, use {@link #markAsFunctionCall}. *

    * When using function-call syntax:

      *
    • parameters must be registered by position (not name)
    • @@ -55,11 +52,6 @@ */ public interface ProcedureCall extends CommonQueryContract, SynchronizeableQuery, StoredProcedureQuery, AutoCloseable { - /** - * The hint key (for use with JPA's "hint system") indicating the function's return JDBC type code - * (aka, {@link java.sql.Types} code) - */ - String FUNCTION_RETURN_TYPE_HINT = "hibernate.procedure.function_return_jdbc_type_code"; /** * Get the name of the stored procedure (or function) to be called. @@ -282,4 +274,12 @@ default void close() { @Override ProcedureCall registerStoredProcedureParameter(String parameterName, Class type, ParameterMode mode); + + /** + * The hint key indicating the function's return {@linkplain java.sql.Types JDBC type code}. + * + * @deprecated This hint no longer has any effect. Use {@link #markAsFunctionCall(int)}. + */ + @Deprecated(since="7", forRemoval = true) + String FUNCTION_RETURN_TYPE_HINT = "hibernate.procedure.function_return_jdbc_type_code"; }