2016-06-27 25 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。

​​

我希望这有助于你

相关问题