我想在命名查询(JPA 2.0)中设置参数,因此我的dataTable将呈现相应的dataSet。远程获取参数并将其注入AbstractFacade类。
我已尝试通过上面的代码实现此目的,但它无效。 有人能帮助我吗?
AbstractFacade(主要代码):
private String prefDep;
public List<T> findByPrefDep() {
prefDep= FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("xPrefDep");
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).setParameter("prefDep", prefDep).getResultList();
}
实体类(主要代码):
@NamedQuery(name = "Capacitacao.findByPrefDep", query = "SELECT c FROM Capacitacao c WHERE c.prefDep = :prefDep"),
AbstractController:
public Collection<T> getItems() {
if (items == null) {
items = this.ejbFacade.findByPrefDep();
}
return items;
}
没有启动异常,但呈现的dataSet对应于findAll命名查询。
提前致谢。
答案 0 :(得分:1)
您的代码根本不使用您的命名查询。命名查询具有名称,您的代码不会在任何地方使用该名称。
使用
getEntityManager().createNamedQuery("Capacitacao.findByPrefDep", Capacitacao.class)
.setParameter("prefDep", prefDep)
.getResultList();
您只需阅读EntityManager javadoc即可找到自己。