如何从JPA查询中获取结果,按自定义条件筛选

时间:2012-05-04 11:03:26

标签: java jpa-2.0 jpql criteria-api

是否有机会按照似乎只是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并指定分页参数以获得固定大小的结果集。但我想进行一些额外的复杂过滤,这些过滤无法通过查询来表达。如果我做一些帖子查询处理功能并用它来过滤查询结果,我会打破分页不变,页面大小。这不会很好,也不方便。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

您需要动态构建查询。

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

Query queryObject = em.createNativeQuery(queryString);