From 60dd63536efb97b72b4e357b70efd4e8b65ae271 Mon Sep 17 00:00:00 2001 From: Steve Ebersole Date: Thu, 5 May 2016 15:33:23 -0500 Subject: [PATCH] HHH-10726 - Support for Java 8 date/time types as Query parameters --- .../main/java/org/hibernate/query/Query.java | 29 +++++++ .../query/internal/AbstractProducedQuery.java | 76 +++++++++++++++++ .../spi/StoredProcedureQueryImplementor.java | 82 ------------------- 3 files changed, 105 insertions(+), 82 deletions(-) delete mode 100644 hibernate-core/src/main/java/org/hibernate/query/procedure/spi/StoredProcedureQueryImplementor.java diff --git a/hibernate-core/src/main/java/org/hibernate/query/Query.java b/hibernate-core/src/main/java/org/hibernate/query/Query.java index 3950dde4d9..aa419060d8 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/Query.java +++ b/hibernate-core/src/main/java/org/hibernate/query/Query.java @@ -6,6 +6,10 @@ */ package org.hibernate.query; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZonedDateTime; import java.util.Calendar; import java.util.Date; import javax.persistence.FlushModeType; @@ -50,6 +54,31 @@ public interface Query extends TypedQuery, org.hibernate.Query, BasicQu */ RowSelection getQueryOptions(); + Query setParameter(Parameter param, Instant value, TemporalType temporalType); + + Query setParameter(Parameter param, LocalDateTime value, TemporalType temporalType); + + Query setParameter(Parameter param, ZonedDateTime value, TemporalType temporalType); + + Query setParameter(Parameter param, OffsetDateTime value, TemporalType temporalType); + + Query setParameter(String name, Instant value, TemporalType temporalType); + + Query setParameter(String name, LocalDateTime value, TemporalType temporalType); + + Query setParameter(String name, ZonedDateTime value, TemporalType temporalType); + + Query setParameter(String name, OffsetDateTime value, TemporalType temporalType); + + Query setParameter(int position, Instant value, TemporalType temporalType); + + Query setParameter(int position, LocalDateTime value, TemporalType temporalType); + + Query setParameter(int position, ZonedDateTime value, TemporalType temporalType); + + Query setParameter(int position, OffsetDateTime value, TemporalType temporalType); + + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // covariant overrides diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/AbstractProducedQuery.java b/hibernate-core/src/main/java/org/hibernate/query/internal/AbstractProducedQuery.java index 454a906695..4cce49fbf3 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/AbstractProducedQuery.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/AbstractProducedQuery.java @@ -7,6 +7,10 @@ package org.hibernate.query.internal; import java.io.Serializable; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -298,6 +302,78 @@ public abstract class AbstractProducedQuery implements QueryImplementor { return ArrayHelper.toStringArray( getParameterMetadata().getNamedParameterNames() ); } + @Override + public QueryImplementor setParameter(Parameter param, Instant value, TemporalType temporalType) { + locateBinding( param ).setBindValue( value, temporalType ); + return this; + } + + @Override + public QueryImplementor setParameter(Parameter param, LocalDateTime value, TemporalType temporalType) { + locateBinding( param ).setBindValue( value, temporalType ); + return this; + } + + @Override + public QueryImplementor setParameter(Parameter param, ZonedDateTime value, TemporalType temporalType) { + locateBinding( param ).setBindValue( value, temporalType ); + return this; + } + + @Override + public QueryImplementor setParameter(Parameter param, OffsetDateTime value, TemporalType temporalType) { + locateBinding( param ).setBindValue( value, temporalType ); + return this; + } + + @Override + public QueryImplementor setParameter(String name, Instant value, TemporalType temporalType) { + locateBinding( name ).setBindValue( value, temporalType ); + return this; + } + + @Override + public QueryImplementor setParameter(String name, LocalDateTime value, TemporalType temporalType) { + locateBinding( name ).setBindValue( value, temporalType ); + return this; + } + + @Override + public QueryImplementor setParameter(String name, ZonedDateTime value, TemporalType temporalType) { + locateBinding( name ).setBindValue( value, temporalType ); + return this; + } + + @Override + public QueryImplementor setParameter(String name, OffsetDateTime value, TemporalType temporalType) { + locateBinding( name ).setBindValue( value, temporalType ); + return this; + } + + @Override + public QueryImplementor setParameter(int position, Instant value, TemporalType temporalType) { + locateBinding( position ).setBindValue( value, temporalType ); + return this; + } + + @Override + public QueryImplementor setParameter(int position, LocalDateTime value, TemporalType temporalType) { + locateBinding( position ).setBindValue( value, temporalType ); + return this; + } + + @Override + public QueryImplementor setParameter(int position, ZonedDateTime value, TemporalType temporalType) { + locateBinding( position ).setBindValue( value, temporalType ); + return this; + } + + @Override + public QueryImplementor setParameter(int position, OffsetDateTime value, TemporalType temporalType) { + locateBinding( position ).setBindValue( value, temporalType ); + return this; + } + @Override @SuppressWarnings("unchecked") public

QueryImplementor setParameter(QueryParameter

parameter, P value) { diff --git a/hibernate-core/src/main/java/org/hibernate/query/procedure/spi/StoredProcedureQueryImplementor.java b/hibernate-core/src/main/java/org/hibernate/query/procedure/spi/StoredProcedureQueryImplementor.java deleted file mode 100644 index 43a022e624..0000000000 --- a/hibernate-core/src/main/java/org/hibernate/query/procedure/spi/StoredProcedureQueryImplementor.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * 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 . - */ -package org.hibernate.query.procedure.spi; - -import java.util.Calendar; -import java.util.Date; -import javax.persistence.FlushModeType; -import javax.persistence.LockModeType; -import javax.persistence.Parameter; -import javax.persistence.ParameterMode; -import javax.persistence.StoredProcedureQuery; -import javax.persistence.TemporalType; - -import org.hibernate.procedure.ProcedureCall; -import org.hibernate.query.spi.QueryImplementor; - -/** - * Defines extended support for JPA-defined stored-procedure execution. This is the one Query form - * that still uses wrapping as there are very fundamental differences between Hibernate's - * native procedure support and JPA's. - * - * @author Steve Ebersole - */ -public interface StoredProcedureQueryImplementor extends StoredProcedureQuery, QueryImplementor { - ProcedureCall getHibernateProcedureCall(); - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // covariant overrides - - @Override - StoredProcedureQueryImplementor setHint(String hintName, Object value); - - @Override - StoredProcedureQueryImplementor setParameter(Parameter param, T value); - - @Override - StoredProcedureQueryImplementor setParameter(Parameter param, Calendar value, TemporalType temporalType); - - @Override - StoredProcedureQueryImplementor setParameter(Parameter param, Date value, TemporalType temporalType); - - @Override - StoredProcedureQueryImplementor setParameter(String name, Object value); - - @Override - StoredProcedureQueryImplementor setParameter(String name, Calendar value, TemporalType temporalType); - - @Override - StoredProcedureQueryImplementor setParameter(String name, Date value, TemporalType temporalType); - - @Override - StoredProcedureQueryImplementor setParameter(int position, Object value); - - @Override - StoredProcedureQueryImplementor setParameter(int position, Calendar value, TemporalType temporalType); - - @Override - StoredProcedureQueryImplementor setParameter(int position, Date value, TemporalType temporalType); - - @Override - StoredProcedureQueryImplementor setFlushMode(FlushModeType flushMode); - - @Override - StoredProcedureQueryImplementor registerStoredProcedureParameter(int position, Class type, ParameterMode mode); - - @Override - StoredProcedureQueryImplementor registerStoredProcedureParameter(String parameterName, Class type, ParameterMode mode); - - @Override - StoredProcedureQueryImplementor setMaxResults(int maxResult); - - @Override - StoredProcedureQueryImplementor setFirstResult(int startPosition); - - @Override - StoredProcedureQueryImplementor setLockMode(LockModeType lockMode); -}