2016-06-27 7 views
0

私は4つの離脱名を含むleaveListを持っています。このleaveListはマップ値として渡されます.HiberクエリーにleaveListを渡してCompanyLeaveテーブルから離れる詳細を取得したい私のCompany Leave Tableは6つのleave details.leaveListに3つのleave names.Iを持っています。私はCompanyLeave Tableからこれら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; 

    } 

NBれる:私は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クエリに追加しようとしています。 はここで、この場合に休止することにより生成されたクエリは、(実際には起きていないとここで起こっていただきました!あなたが理解できるようにすることだけである)このようになります

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

をしかし、ここでleaveNameは、java.lang.String型でありますしたがって、hibernteフレームワークは値が文字列のみであることを期待しています。 (Hibernteこれを期待する)休止フレームワークはjava.lang.Stringでにjava.util.ArrayListのを変換しようとし、したがって、例外がスローされ、その明白なことを最初のクエリから

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

サンプルコードを参照してください。

ソリューション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。

私はこれがあなた

を役に立てば幸い ​​

関連する問題