【问题标题】:Hibernate 5 the value is not set for the parameter number 2Hibernate 5 未设置参数号 2 的值
【发布时间】:2019-03-20 13:30:29
【问题描述】:

我正在从 Hibernate 3 迁移到 Hibernate 5 版本。目前,我使用的是 5.4.0.Final 版本。

我对使用存储库方法deleteByAllPatientFlowGens的一项测试有疑问:

public void deleteByAllPatientFlowGens(List<PatientFlowGen> list) {
    if (!list.isEmpty()) {
        getEntityManager().createNamedQuery(DELETE_BY_ALL_PATIENT_FLOW_GENS_QUERY)
                .setParameter("patient_flow_gens", list)
                .executeUpdate();
    }
}

它应该调用命名查询:

@NamedQuery(name = RequestedFlowGenSettings.DELETE_BY_ALL_PATIENT_FLOW_GENS_QUERY,
            query = "delete from RequestedFlowGenSettings where patientFlowGen in :patient_flow_gens")

该方法接收包含两个元素的列表,但在日志中我看到两个参数都绑定为 1:

2019-03-19 04:44:16,855 DEBUG [main] SQL - delete from requested_flow_gen_settings where patient_flow_gen in (? , ?)
2019-03-19 04:44:16,858 TRACE [main] BasicBinder - binding parameter [1] as [BIGINT] - [2994]
2019-03-19 04:44:16,858 TRACE [main] BasicBinder - binding parameter [1] as [BIGINT] - [2995]
2019-03-19 04:44:16,864 ERROR [main] SqlExceptionHelper - The value is not set for the parameter number 2

使用以前的 Hibernate 版本 (3.6.3.Final) 一切正常。有日志:

2019-03-19 04:47:42,275 DEBUG [main] SQL - delete from requested_flow_gen_settings where patient_flow_gen in (? , ?)
2019-03-19 04:47:42,277 TRACE [main] BasicBinder - binding parameter [1] as [BIGINT] - 2996
2019-03-19 04:47:42,277 TRACE [main] BasicBinder - binding parameter [2] as [BIGINT] - 2997

附:我尝试使用 setParameterList 方法,但问题是一样的。

【问题讨论】:

    标签: java sql sql-server hibernate


    【解决方案1】:

    我发现解决此问题的唯一方法是对列表中的每个元素执行命名查询。所以,这是我的存储库方法:

    public void deleteByAllPatientFlowGens(List<PatientFlowGen> list) {
        if (!list.isEmpty()) {
            list.forEach(patientFlowGen -> {
                getEntityManager().createNamedQuery(DELETE_BY_ALL_PATIENT_FLOW_GENS_QUERY)
                        .setParameter("patient_flow_gens", patientFlowGen)
                        .executeUpdate();
            });
        }
    }
    

    我知道,这是一个快速的肮脏修复。但我别无选择)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多