【问题标题】:How to set a Http Session parameter in a JPA named query如何在 JPA 命名查询中设置 Http Session 参数
【发布时间】:2014-04-28 22:38:31
【问题描述】:

我想在命名查询 (JPA 2.0) 中设置一个参数,因此我的 dataTable 将呈现相应的数据集。该参数是远程获取的并注入到 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();
}

Entity 类(主要代码):

@NamedQuery(name = "Capacitacao.findByPrefDep", query = "SELECT c FROM Capacitacao c WHERE c.prefDep = :prefDep"),

抽象控制器:

public Collection<T> getItems() {
    if (items == null) {
        items = this.ejbFacade.findByPrefDep();
    }
    return items;
}

没有异常启动,但是渲染的dataSet对应一个findAll命名的查询。

提前致谢。

【问题讨论】:

    标签: session jpa ejb


    【解决方案1】:

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

    使用

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

    您可以通过阅读EntityManager javadoc 找到自己。

    【讨论】:

      猜你喜欢
      • 2017-07-26
      • 1970-01-01
      • 2013-06-10
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      相关资源
      最近更新 更多