2017-06-01 11 views
0

我想搜索所有員工,使用存儲在serialNumberList中的相應ID並將所有時間加在一起。 serialNumberList是一個包含用逗號分隔的ID的字符串。發生的情況是,它無法添加serialNumberList中指示的所有員工的所有小時數。這是我的代碼片段。謝謝。如何在休眠模式下使用setParameter

查詢

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 

回答

1

您需要修復如下:

您的搜索條件應該是pde.serialNumberIN(:serialNumberList)

您需要更改參數,序列號列表,然後使用:

setParameterList( 「serialNumberList」,serialNumberList)

+0

1:我忘了把它改成IN。謝謝 2:serialNumberList不是一個列表,雖然...這是一個字符串包含id用逗號分隔.. – KaelJasper

+0

好吧,我的壞!我認爲這是一個列表。將編輯答案。希望它現在可以工作。 – YuVi

+0

它仍然不起作用 – KaelJasper

0

我將字符串更改爲字符串[],以便我可以使用setParameterList()如YuVi-san所說的

0

除了@ YuVi的回答IN,您還必須將列表作爲實際列表傳遞,而不是字符串。

+0

啊我明白了。這就是爲什麼。 – KaelJasper