2016-06-27 47 views
0

我有一個包含4個離開名稱的leaveList。此leaveList作爲映射值傳遞。我想通過在hql查詢中傳遞leaveList來從CompanyLeave Table中獲取離開詳細信息。請注意,我的公司離開表包含6個離開的細節.leaveList有3個離開的名稱。我想從CompanyLeave表中獲取這3個離開的細節。如何在hql查詢中傳遞列表,其中列表是地圖的值

代碼HQL查詢這裏leaveNameList是一個清單,以及地圖

public List<CompanyLeaveType> getByValidLeave(Map<String, Object> params) { 

     Query query = sessionfactory.getCurrentSession().createQuery("from CompanyLeaveType WHERE companyCode = :companyCode and leaveName IN (:leaveNames)");                 
     query.setParameter("companyCode", params.get("companyCode")); 
     query.setParameter("leaveNames", params.get("leaveNameList")); 
     List<CompanyLeaveType> validLeaveDetails = query.list(); 

     return validLeaveDetails; 

    } 

注:我有java.util.ArrayList中不能轉換爲java.lang.String error.How可我通過列表在hql查詢?

回答

0

使用query.setParameterList(),在這裏檢查documentation

1
Query query = sessionfactory.getCurrentSession().createQuery("from CompanyLeaveType WHERE companyCode = :companyCode and leaveName IN (:leaveNames)");                 

     query.setParameter("leaveNames", params.get("leaveNameList")); 

這裏您試圖將列表對象添加到Hql查詢中。 在這裏,在這種情況下,由Hibernate生成的查詢看起來是這樣的(實際上它不是發生了,只是讓你明白什麼怎麼回事)

1) Select *from companyLeveType_Table where companyCode=someX and leaveName in(ListObject) 

但這裏的leaveName是java.lang.String類型因此休眠框架期望值應該只是字符串。見示例代碼(Hibernte預計這一)

2) Select *from companyLeveType_Table where companyCode=someX and leaveName in("A","B","C"); 

從第一查詢其明顯的是,休眠框架嘗試將java.util.ArrayList中轉換爲java.lang.String並且因此異常拋出。

溶液1)

public List<CompanyLeaveType> getByValidLeave(Map<String, Object> params) { 

    Query query = sessionfactory.getCurrentSession().createQuery("from CompanyLeaveType WHERE companyCode = :companyCode and leaveName IN (:leaveNames)");                 
    query.setParameter("companyCode", params.get("companyCode")); 
    query.setParameterList("leaveNames", params.get("leaveNameList")); // changes here only remaining is same 
    List<CompanyLeaveType> validLeaveDetails = query.list(); 

    return validLeaveDetails; 

} 

解決方案2: 使用標準API。

​​

我希望這有助於你

相關問題