【问题标题】:How to get result from JPA query, filtered by custom criteria如何从 JPA 查询中获取结果,按自定义条件过滤
【发布时间】:2012-05-13 22:10:30
【问题描述】:

是否有机会通过似乎只是一个 java 函数的复杂自定义条件来过滤查询结果?我希望这个标准函数在实体创建和将其放入结果集合之间发挥作用。 例如,我有以下实体和查询

@Entity
@NamedQueries{
    @NamedQuery(name="myquery",query="...")
}
class MyEntity{
    @Id
    public long id;

    @Column(name="NAME")
    public String name;

    @Column(name="description")
    public String description;
}

我可以执行myquery 并指定分页参数以获取固定大小的结果集。但是我想做一些额外的复杂过滤,不能用查询来表达。如果我制作一些后查询处理功能并使用它来过滤查询结果,我会破坏分页不变量,页面大小。这不会很好和方便。

【问题讨论】:

    标签: java jpa-2.0 jpql criteria-api


    【解决方案1】:

    没有简单的方法可以做到这一点。 setFirstResult()setMaxResults() 方法应用于生成的 SQL 查询。例如,在 MySQL 中,LIMIT (10, 10) 被添加到查询的 where 子句中)。因此,如果您在执行查询后过滤结果,您将始终获得较少数量的结果。

    【讨论】:

    • 有什么困难但高效合理的方法吗?
    • 使用存储过程?使用 JDBC,滚动结果集,并在每一行上应用过滤器,直到获得页面大小?如果使用 Hibernate,是否使用原生 API 滚动查询结果?
    【解决方案2】:

    NamedQueries 是实现此目的的错误方法。

    您需要即时构建查询。

    EntityManager em=....
    Query queryObject = em.createQuery(queryString);
    

    Query queryObject = em.createNativeQuery(queryString);
    

    【讨论】:

      猜你喜欢
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 2020-06-16
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多