创建一个namedQuery以获取筛选结果

时间:2014-10-02 01:35:08

标签: jpa named-query

如何将参数设置为命名查询中的值列表,以便从数据库中获取过滤后的resultSet?

例如:我想要一个只包含按代码1,2和3过滤的数据的resultSet。

在SQL中,查询是:

SELECT * FROM PontoEletronico WHERE prefDep IN (1, 2, 3);

当我阅读here时,我的namedQuery实际上是:

@NamedQuery(name = "PontoEletronico.findAllEscritorios", query = "SELECT p FROM PontoEletronico p WHERE p.prefDep IN :myList");

myList设置如下:

List<PrefDeps> myList;
private final PrefDeps p1 = new PrefDeps();
private final PrefDeps p2 = new PrefDeps();

    public List<T> findAllEscritorios() {
    p1.setPrefDep(9882);
    p2.setPrefDep(9517);
    myList.add(p1);
    myList.add(p2);
    return (List<T>) getEntityManager().createNamedQuery("PontoEletronico.findAllEscritorios", PontoEletronico.class).setParameter("prefDep", myList).getResultList();
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

只需将"myList"设为setParameter call ::

的键即可
return (List<T>) getEntityManager().createNamedQuery("PontoEletronico.findAllEscritorios", PontoEletronico.class).setParameter("myList", myList).getResultList();

来自javax.persistence.Query

/**
 * Bind an argument value to a named parameter.
 * @param name  parameter name
 * @param value  parameter value
 * @return the same query instance
 * @throws IllegalArgumentException if the parameter name does 
 *         not correspond to a parameter of the query or if
 *         the argument is of incorrect type
 */
Query setParameter(String name, Object value);

因此,在名为参数:myList的查询中,您应该在setParameter上使用相同的密钥。

祝你好运!