如何将哈希映射作为参数传递给JPA?

时间:2013-10-25 10:32:08

标签: hibernate jpa

我有一个hashMap参数,其中包含<Sting,Value>现在我想将这些值传递到两个JPA列中。

SELECT obj from x obj where x.no=?<String goes here> and x.amount=?<value goes here >

我怎么能用JPQL做到这一点?

2 个答案:

答案 0 :(得分:1)

根据to this,你可以使用KEY()和VALUE(),在你的情况下,它会给出这样的东西:

Query query = em.createQuery("SELECT obj from x obj where x.no=KEY(:mapParam) and x.amount=VALUE(:mapParam)");
query.setParamters("mapParam", yourMap);
query.getResultList();

但是要小心,你需要使用JPA 2.0,并且Hibernate存在一些问题,从那时起就已经修复了,但是,你必须使用固定版本(4.1.4+)。请参阅this

答案 1 :(得分:0)

使用此循环,您可以遍历Map以执行所有键值对的select statements

Query query = em.createQuery("SELECT obj from x obj where x.no=:x_no and x.amount=:x_amt");
List<ResultObj> resultList = new ArrayList<ResultObj>();
Iterator<Entry<String, Value>> iter = yourMap.entrySet().iterator();
while (iter.hasNext()) {
    Entry<String, Value> next = iter.next();
    Value value = next.getValue();
    query.setParameter("x_no", next).setParameter("x_amt", value);
    ResultObj result = (ResultObj) query.getSingleResult();
    resultList.add(result);
}