如何在Hibernate中使用setParameter

时间:2017-06-01 02:21:29

标签: java sql postgresql hibernate

我希望使用serialNumberList中存储的相应ID搜索所有员工,并将所有时间加在一起。 serialNumberList是一个包含用逗号分隔的ID的字符串。发生的事情是它无法添加serialNumberList中指示的所有员工的所有时间。这是我的代码片段。感谢。

查询

public double getPeMSummary(Date startDate, Date endDate, String serialNumberList) {
    SessionFactory sessionFactory = HBSessionFactory.getSessionFactory();
    Session sessObj = sessionFactory.openSession();
    sessObj.beginTransaction();
    String query = "SELECT SUM(CAST(pde.utilHours as float)) from PumDetailsEntity as pde WHERE"
            + " pde.utilDay >= :startDate AND"
            + " pde.utilDay <= :endDate AND"
            + " pde.serialNumber = (:serialNumberList) AND"
            + " (pde.utilHours NOT LIKE '%HO%' OR"
            + "  pde.utilHours NOT LIKE '%VL%' OR"
            + "  pde.utilHours NOT LIKE '%SL%'"
            + "  )";

    Iterator result = sessObj.createQuery(query).
            setParameter("startDate", startDate).
            setParameter("endDate", endDate).
            setParameter("serialNumberList", serialNumberList).list().iterator();

    sessObj.close();

    double ans = 0;
    if (result.hasNext()){
        Object obj = result.next();
        if (obj instanceof Double) {
            ans = (Double) obj;
        }
        System.out.println(obj+" "+ans);
    }
    return ans;
}

示例数据

第一个:开始日期第二个:结束日期第三个:用逗号分隔的ID列表

2016-12-24 2017-01-27 'P100GEPH1,X91729PH1,P100F2PH1,P100FBPH1,123973PH1,P100C2PH1,123972PH1,112935PH1,P100F9PH1,P100F7PH1,P100F5PH1,147598PH1,P100F8PH1,P100F0PH1,P100GFPH1,113212PH1,P100ARPH1,134662PH1,148034PH1

3 个答案:

答案 0 :(得分:1)

您需要修复以下内容:

您的搜索条件应为pde.serialNumber IN (:serialNumberList)

您需要将参数序列号更改为列表并使用:

  

setParameterList (“serialNumberList”,serialNumberList)

答案 1 :(得分:0)

我将String更改为String [],以便我可以使用YuVi-san所说的setParameterList()

答案 2 :(得分:0)

除了@ YuVi对IN的回答之外,您还必须将列表作为实际List传递,而不是String。