首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPA2 CriteriaQuery,使用限制

JPA2 CriteriaQuery,使用限制
EN

Stack Overflow用户
提问于 2012-07-26 02:05:40
回答 2查看 93.3K关注 0票数 74

我使用的是JPA2。出于安全原因,我使用CriteriaQuery的类型安全(因此,我不会寻找任何类型查询等的解决方案)。

我最近遇到了一个问题,其中我需要设置SQL-LIMIT。

经过大量的搜索,我仍然没有成功地找到解决方案。

代码语言:javascript
运行
复制
CriteriaQuery<Product> query = getEntityManager().getCriteriaBuilder().createQuery(Product.class);
Root<Product> product = query.from(Product.class);
query.select(product);

return em.createQuery(query).getResultList();

有谁可以帮我?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-26 02:10:12

Query上定义limitoffset

代码语言:javascript
运行
复制
return em.createQuery(query)
         .setFirstResult(offset) // offset
         .setMaxResults(limit) // limit
         .getResultList();

从文档中:

TypedQuery setFirstResult(int startPosition)

设置要检索的第一个结果的位置。参数:startPosition -第一个结果的位置,从0开始编号

TypedQuery setMaxResults(int maxResult)

设置要检索的最大结果数。

票数 169
EN

Stack Overflow用户

发布于 2018-06-06 16:52:46

为了完整起见,我想回答关于JPA Criteria API的最初问题。

JPQL首先是,您可以根据用例预先明确何时使用JPQL以及何时使用Criteria 。在ObjectDB documentation网站上有一篇关于这一点的好文章,它说:

使用criteria API的一个主要优点是,可以在编译期间而不是在运行时更早地检测到错误。另一方面,对于许多开发人员来说,基于字符串的JPQL查询更容易使用和理解,它与SQL查询非常相似。

我一般推荐这篇文章,因为它简要地描述了如何使用JPA Criteria API。还有一篇关于Query API的类似文章。

回到问题

例如,通过使用where()方法,CriteriaQuery提供了一组可以访问的限制。正如您可能直观地猜测到的那样:您不能使用这样的限制将查询限制到特定数量的结果-除非您有限制唯一标识符这样的琐碎情况(这将使Criteria API的使用过时)。简单地解释:限制不是标准,因此不在该api的覆盖范围内。有关更多详细信息,请参阅旧的但金色的Java EE docs

解决方案

但是,您当然可以使用CriteriaQuery对象作为JPQL查询的基础。因此,首先,按原样创建CriteriaQuery:

代码语言:javascript
运行
复制
CriteriaQuery<Product> criteriaQuery = 
    getEntityManager().getCriteriaBuilder().createQuery(Product.class);
Root<Product> product = criteriaQuery.from(Product.class);
criteriaQuery.select(product);

然后使用CriteriaQuery对象的JPA Query构造函数:

代码语言:javascript
运行
复制
Query limitedCriteriaQuery = getEntityManager().createQuery(criteriaQuery)
     .setMaxResults(resultLimit); // this is the important part     
return limitedCriteriaQuery.getResultList();

根据文档和提供的文章,这基本上就是您应该如何使用这两个API的方法。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11655870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档