如何在JPA命名查询中设置Http Session参数

时间:2014-04-28 22:38:31

标签: session jpa ejb

我想在命名查询(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命名查询。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您的代码根本不使用您的命名查询。命名查询具有名称,您的代码不会在任何地方使用该名称。

使用

getEntityManager().createNamedQuery("Capacitacao.findByPrefDep", Capacitacao.class)
                  .setParameter("prefDep", prefDep)
                  .getResultList();

您只需阅读EntityManager javadoc即可找到自己。