为了完整起见,我想回答有关 JPA 标准 API 的初始问题。
首先,您可以事先澄清何时使用 JPQL 以及何时使用标准 API,具体取决于用例。在ObjectDB文档网站上有一篇关于此的好文章,其中指出:
使用标准 API 的一个主要优点是,可以在编译期间而不是在运行时更早地检测到错误。另一方面,对于许多开发人员来说,基于字符串的JPQL查询与SQL查询非常相似,更易于使用和理解。
总的来说,我推荐这篇文章,因为它简明扼要地描述了如何使用JPA标准API。有一篇关于查询 API 的类似文章。
回到问题:
提供了一组限制,例如,可以使用该方法访问这些限制。正如您可能直观地猜测的那样:您无法通过此类限制将查询限制为特定数量的结果 - 除非您有一个微不足道的情况,例如限制唯一标识符(这将使标准API的使用过时)。简单地解释:限制不是一个标准,因此不被该api所涵盖。另请参阅旧的但金色的 Java EE 文档以获取更多详细信息。CriteriaQuery
where()
溶液
但是,您当然可以使用 CriteriaQuery 对象作为 JPQL 查询的基础。因此,首先,按原样创建 CriteriaQuery:
CriteriaQuery<Product> criteriaQuery =
getEntityManager().getCriteriaBuilder().createQuery(Product.class);
Root<Product> product = criteriaQuery.from(Product.class);
criteriaQuery.select(product);
然后对对象使用 JPA 构造函数:Query
CriteriaQuery
Query limitedCriteriaQuery = getEntityManager().createQuery(criteriaQuery)
.setMaxResults(resultLimit); // this is the important part
return limitedCriteriaQuery.getResultList();
这基本上就是您应该如何根据文档和提供的文章使用这两个API。