【问题标题】:How to use setParameter in Hibernate如何在 Hibernate 中使用 setParameter
【发布时间】:2017-06-01 02:21:28
【问题描述】:

我想搜索所有具有存储在serialNumberList 中的相应 ID 的员工,并将他们的所有工作时间加在一起。 serialNumberList 是一个字符串,其中包含用逗号分隔的 id。发生的情况是它无法添加serialNumberList 中指示的所有员工的所有小时数。这是我的代码的 sn-p。谢谢。

查询

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

【问题讨论】:

    标签: java sql postgresql hibernate


    【解决方案1】:

    您需要解决以下问题:

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

    需要更改参数序号才能列出使用:

    setParameterList("serialNumberList", serialNumberList)

    【讨论】:

    • 1: 我忘了把它改成 IN。谢谢 2:虽然 serialNumberList 不是列表...它是一个包含用逗号分隔的 id 的字符串..
    • 好吧,我的错!我还以为是清单将编辑答案。希望它现在有效。
    • 那么我相信问题出在参数列表上。请参阅我的编辑。回复了我原来的答案。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 啊,我明白了。这就是为什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 2021-04-06
      • 2023-04-09
      • 1970-01-01
      • 2015-03-05
      • 2019-09-05
      相关资源
      最近更新 更多