You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus调用Oracle存储过程时quarkus.hibernate-orm.proc.param_null_passing不生效问题

问题原因
  • 你使用的quarkus.hibernate-orm.proc.param_null_passing既不是合法的查询提示(hint)键,也不是Quarkus官方支持的Hibernate配置项,因此会抛出「未识别配置键」的警告,该配置写法完全不生效。
  • Hibernate 6及以上版本默认禁止存储过程入参传递null值,你的代码中位置7、8的入参被赋值为null,又没有为对应参数单独开启空值传递权限,因此触发IllegalArgumentException异常,异常提示中也明确要求需要调用ParameterRegistration#enablePassingNulls(true)。
解决方案

方案1:单查询单独配置(推荐)

仅针对需要传null的参数开启空值传递权限,无需改动全局配置,修改代码如下:

  1. 删掉代码中无效的query.setHint("quarkus.hibernate-orm.proc.param_null_passing", true);行
  2. 在注册可能为null的参数时,追加enablePassingNulls(true)调用
    修改后的代码示例:
StoredProcedureQuery query = em.createStoredProcedureQuery("{ ? = call mypackage.myprocedure(?,?,?,?,?,?,?,?,?)} ");

query.registerStoredProcedureParameter(1, Integer.class, ParameterMode.OUT);
query.registerStoredProcedureParameter(2, Long.class, ParameterMode.IN);
query.registerStoredProcedureParameter(3, String.class, ParameterMode.IN);
query.registerStoredProcedureParameter(4, String.class, ParameterMode.IN);
query.registerStoredProcedureParameter(5, String.class, ParameterMode.IN);
query.registerStoredProcedureParameter(6, Long.class, ParameterMode.IN);
// 给可能传null的第7个参数开启空值传递
query.registerStoredProcedureParameter(7, String.class, ParameterMode.IN)
     .enablePassingNulls(true);
// 给可能传null的第8个参数开启空值传递
query.registerStoredProcedureParameter(8, String.class, ParameterMode.IN)
     .enablePassingNulls(true);
query.registerStoredProcedureParameter(9, String.class, ParameterMode.OUT);
query.registerStoredProcedureParameter(10, String.class, ParameterMode.OUT);

// 后续参数赋值逻辑不变
query.setParameter(2, x);
query.setParameter(3, xx);
query.setParameter(4, xxxx);
query.setParameter(5, ccccc);
query.setParameter(6, sssss);
query.setParameter(7, null);
query.setParameter(8, null);

方案2:全局配置

如果项目中多个存储过程都需要传递null参数,可以直接在application.properties中添加全局配置,所有存储过程默认允许传null:

quarkus.hibernate-orm.query.pass-null-parameters=true

该配置开启后不需要再单独给参数调用enablePassingNulls(true)。


内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:54:10