我正在从 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
P.S。我尝试使用 setParameterList 方法,但问题是相同的。
答案 0 :(得分:0)
我发现解决该问题的唯一方法是对列表中的每个元素执行命名查询。所以,这是我的存储库方法:
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();
});
}
}
我知道,这是一个快速的肮脏修复程序。但我别无选择)