如何将参数设置为命名查询中的值列表,以便从数据库中获取过滤后的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();
}
提前致谢。
答案 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
上使用相同的密钥。