From 2972e501d466b0e22a5b5e9b0b4a8c28857e7c2b Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Mon, 26 Sep 2022 16:33:12 +0200 Subject: [PATCH] HHH-15542 Cannot invoke 'org.hibernate.query.BindableType.getBindableJavaType()' because 'parameterType' is null --- .../procedure/internal/ProcedureCallImpl.java | 28 ++++++++++--------- .../internal/ProcedureParameterImpl.java | 3 ++ 2 files changed, 18 insertions(+), 13 deletions(-) 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 38d6d62e5287..6f8dea902dda 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 @@ -462,23 +462,13 @@ public ProcedureCallImplementor registerStoredProcedureParameter( public ProcedureParameter registerParameter(int position, Class javaType, ParameterMode mode) { final BindableType parameterType = getSessionFactory().resolveParameterBindType( javaType ); - final Class expressibleJavaType; - if ( parameterType == null ) { - expressibleJavaType = null; - } - else { - final SqmExpressible sqmExpressible = parameterType.resolveExpressible( getSessionFactory() ); - assert sqmExpressible != null; - - expressibleJavaType = sqmExpressible.getExpressibleJavaType().getJavaTypeClass(); - } - final ProcedureParameterImpl procedureParameter = new ProcedureParameterImpl<>( position, mode, - expressibleJavaType, + getExpressibleJavaType( parameterType ), parameterType ); + registerParameter( procedureParameter ); return procedureParameter; @@ -518,7 +508,7 @@ public ProcedureParameterImplementor registerParameter(String name, Class final ProcedureParameterImpl parameter = new ProcedureParameterImpl<>( name, mode, - parameterType.getBindableJavaType(), + getExpressibleJavaType( parameterType ), parameterType ); @@ -527,6 +517,18 @@ public ProcedureParameterImplementor registerParameter(String name, Class return parameter; } + private Class getExpressibleJavaType(BindableType parameterType) { + if ( parameterType == null ) { + return null; + } + else { + final SqmExpressible sqmExpressible = parameterType.resolveExpressible( getSessionFactory() ); + assert sqmExpressible != null; + + return sqmExpressible.getExpressibleJavaType().getJavaTypeClass(); + } + } + @Override public ProcedureParameterImplementor registerParameter( String name, 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 8e4aad8a4416..c2f3b32d7a4e 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 @@ -187,6 +187,9 @@ protected void bindParameterValue( }; } } + else if ( typeToUse == null ) { + throw new IllegalArgumentException( "Cannot determine the bindable type for procedure parameter: " + name ); + } else { throw new NotYetImplementedFor6Exception( getClass() ); }