tec*_*ch4 7 java parameters stored-procedures hibernate
我尝试以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
有时变量 totalRows 为空并出现错误
WARN: SQL Error: 17041, SQLState: 99999
Error calling CallableStatement.getMoreResults
Run Code Online (Sandbox Code Playgroud)
可以在休眠中将空值发送到 ProcedureCall 吗?
Suk*_*uta 10
目前有两种方法可以实现您的目标:
param_null_passing在您的休眠配置中将该属性设置为 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);
Run Code Online (Sandbox Code Playgroud)
来自 Hibernate 5文档:
hibernate.proc.param_null_passing(默认值为false):
是否应将空参数绑定作为 ProcedureCall 处理的一部分传递给数据库过程/函数调用的全局设置。隐式 Hibernate 不会传递 null,目的是允许应用任何默认参数值。
这定义了一个全局设置,然后可以通过 org.hibernate.procedure.ParameterRegistration#enablePassingNulls(boolean) 来控制每个参数
值为真(传递 NULL)或假(不传递 NULL)。
您可以尝试通过CallableStatement而不是调用您的存储过程ProcedureCall。
并尝试利用其setNull方法将过程 IN 参数设置为 NULL。
但是对于您的回答 hibernate 是否支持传递 NULL 值,它似乎支持默认参数值而不是替换 null 值。
| 归档时间: |
|
| 查看次数: |
7743 次 |
| 最近记录: |