【问题标题】:JPA How to apply filter to EJB criteriaqueryJPA如何将过滤器应用于EJB条件查询
【发布时间】:2014-03-01 15:14:04
【问题描述】:

我如何只获取给定用户的实体

public List<T> findRangeByUser(int[] range, User user) {
    javax.persistence.criteria.CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    Predicate condition = cb.equal(cq.from(User.class), user);
    cq.select(cq.from(entityClass));
    cq.where(condition);
    javax.persistence.Query q = getEntityManager().createQuery(cq);
    q.setMaxResults(range[1] - range[0]);
    q.setFirstResult(range[0]);
    return q.getResultList();
}

我应该如何处理这个?另请注意,user 是引用 User 表中 userId 的外键 目前正在退回所有物品 非常感谢

【问题讨论】:

    标签: java jpa filter


    【解决方案1】:

    标准构建器需要一个将用户 ID 评估为返回结果的条件。像这样的:

    Predicate condition = qb.equal(root.get(field), usuerController.getUserSession().getUser().getIdUser());
    critera.where(condition);
    

    将“字段”替换为引用用户 ID 的 SingularAttribute。

    【讨论】:

    • @NeerajKrisna 谢谢我已经尝试过了,但是我得到了一个 EJB 异常,未知来源,我还更新了查询
    【解决方案2】:
    public List<T> findRangeByUser(int[] range, User user) {
        javax.persistence.criteria.CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        javax.persistence.criteria.Root<T> rt = cq.from(entityClass);     
        cq.where(cb.equal(rt.get("useridUser"), user));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        q.setMaxResults(range[1] - range[0]);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 2021-12-06
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 2020-09-14
      相关资源
      最近更新 更多