java - ProcedureCall 中的空值

标签 java hibernate stored-procedures parameters

我尝试以下代码:

    ProcedureCall call = ss.createStoredProcedureCall("servicos.CLASSIFIER_MAP");

    call.registerParameter( 1, String.class, ParameterMode.IN).bindValue(classifierString);
    call.registerParameter( 2, Long.class, ParameterMode.IN ).bindValue(totalRows);

有时变量 totalRows 为空并出现错误
WARN:   SQL Error: 17041, SQLState: 99999
Error calling CallableStatement.getMoreResults

可以在 hibernate 中将空值发送到 ProcedureCall 吗?

最佳答案

目前有两种方法可以实现您的目标:

  • 设置属性 param_null_passing在您的 hibernate 配置中为 true。<property name="hibernate.proc.param_null_passing">true</property>这是一个全局设置,可让您将空值传递给 ProcedureCall在整个应用程序中。
  • 如果您不想全局应用上述设置,请将您的代码更改为以下内容:
    ProcedureCall call = ss.createStoredProcedureCall("servicos.CLASSIFIER_MAP");
    
    call.registerParameter( 1, String.class, ParameterMode.IN).bindValue(classifierString); 
    call.registerParameter( 2, Long.class, ParameterMode.IN ).enablePassingNulls(true);
    
    call.setParameter(2,  totalRows);
    

  • 来自 Hibernate 5 documentation :
    hibernate.proc.param_null_passing(默认值为false):

    Global setting for whether null parameter bindings should be passed to database procedure/function calls as part of ProcedureCall handling. Implicitly Hibernate will not pass the null, the intention being to allow any default argument values to be applied.

    This defines a global setting, which can then be controlled per parameter via org.hibernate.procedure.ParameterRegistration#enablePassingNulls(boolean)

    Values are true (pass the NULLs) or false (do not pass the NULLs).

    关于java - ProcedureCall 中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39922446/

    相关文章:

    java - java同时出现多个异常

    hibernate - Hibernate Jar与Grails 2.0.3发生冲突

    mysql - 创建存储过程 phpmyadmin 时出错

    sql - 将可变参数列表传递给 SqlServer2008 存储过程的 Sane/fast 方法

    java - 如何在N次刷新页面后停止<META HTTP-EQUIV ="refresh"CONTENT ="2">

    java - 调用反射方法时参数数量未知

    mysql - hibernate sql join查询错误: javax. servlet.ServletException:对于输入字符串

    java - 当对象不在持久性上下文中时,Hibernate 合并不查询数据库

    postgresql - 使用 jdbc 模板从 spring boot 调用 postgres 存储过程

    java - XML 结构创建问题