对两个条件查询使用相同的谓词

2023-12-04

我想使用相同的数组运行一对查询Predicate:一是统计记录数,一是获取某一页记录。对我来说,这似乎是一个非常正常的用例,所以一定有一个很好的方法来做到这一点,但我还没有找到它。

这是获取实体的部分:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
EntityType<ENTITY> entityType = entityManager.getMetamodel().entity(FooEntity.class);
CriteriaQuery<FooEntity> entityQuery = criteriaBuilder.createQuery(FooEntity.class);
Root<FooEntity> entityRoot = entityQuery.from(FooEntity.class);

// Use the criteria builder, root, and type to create some predicates.
Predicate[] predicates = createPredicates(criteriaBuilder, entityRoot, entityType );

// Fetch the entities.
entityQuery.select(entityRoot);
entityQuery.where(predicates);
List<FooEntity> entities = entityManager.createQuery(entityQuery)
    .setFirstResult(0) // Just get the first page
    .setMaxResults(50)
    .getResultList();

这有效。我们得到了我们想要的,谓词是正确的等等。

但是,创建另一个查询来使用相同谓词确定计数会失败。我尝试了两种不同的方法:

(1) 重复使用Root:

CriteriaQuery<Long> countQuery = criteriaBuilder.createQuery(Long.class);
countQuery.select(criteriaBuilder.count(entityRoot));
countQuery.where(predicates);
long count = entityManager.createQuery(countQuery).getSingleResult();

这不起作用,给了我java.lang.IllegalStateException: No criteria query roots were specified。奇怪,因为我明确指定了Root,但也许我无法重复使用Root这是从不同的地方创建的CriteriaQuery?好吧,让我们用同样的东西来创建一个CriteriaQuery...

(2) 创建一个新的Root:

CriteriaQuery<Long> countQuery = criteriaBuilder.createQuery(Long.class);
countQuery.select(criteriaBuilder.count(countQuery.from(FooEntity.class));
countQuery.where(predicates);
long count = entityManager.createQuery(countQuery).getSingleResult();

现在我们得到一个不同的错误:org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'generatedAlias1.fooProperty' [select count(generatedAlias0) from com.foo.FooEntity as generatedAlias0 where ( generatedAlias1.fooProperty = :param0 )]

查看创建的 HQL,似乎“from”子句设置了一个generatedAlias0,但是“where”子句中的所有内容都引用generatedAlias1。我的猜测是因为数组Predicate是使用不同的构建的Root比中使用的CriteriaQuery<Long>.

所以,如果这两种方法都不起作用,我将如何重新使用相同的数组Predicate?我真的必须用第二个重新创建所有这些吗Root?这对我来说似乎太过分了,尤其是因为他们都是Root<FooEntity>。我觉得一定有更好的方法。


您应该对两个 Root 元素使用相同的别名,例如:

Root<FooEntity> entityRoot = entityQuery.from(FooEntity.class);
entityRoot.alias("alias1") // Property alias

Predicate[] predicates = createPredicates(criteriaBuilder, entityRoot, entityType );

// Fetch the entities.
entityQuery.select(entityRoot);
entityQuery.where(predicates);
List<FooEntity> entities = entityManager.createQuery(entityQuery)
    .setFirstResult(0)
    .setMaxResults(50)
    .getResultList();


CriteriaQuery<Long> countQuery = builder.createQuery(Long.class);
Root<FooEntity> newRoot = countQuery.from(FooEntity.class);
newRoot.alias("alias1"); // Same property alias

countQuery.select(builder.count(newRoot));
countQuery.where(predicates);
Long count = em.createQuery(countQuery).getSingleResult();

这样 JPA 就可以理解并使用相同的限制进行查询

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对两个条件查询使用相同的谓词 的相关文章

  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • C++ 精度:字符串到双精度

    在对转换为双精度的字符串执行一些操作后 我遇到了双精度的精度问题 include
  • 访问 GridPane 节点时出现问题

    我希望你能帮助我做一个我想做的小项目 我正在尝试使用 JavaFX 的 GUI 创建视频游戏 但遇到了一些麻烦 这是我为练习而编写的代码 我不知道为什么这不起作用 public class Main extends Application
  • 预览期间找不到基于上传文件创建的 StreamedContent

    我在 jsf 页面上创建了一个文件上传对话框和一个图像库 每次上传图像后 图库应显示迄今为止上传的所有图像 图像将存储在后端 bean 中 并且应该由图库从后端 bean 动态获取 由于某种原因 图库显示上传的图像标签 但不显示引用图像 因
  • 选择每个类别的前 10 条记录

    我想在一个查询中返回每个部分的前 10 条记录 任何人都可以帮助如何做到这一点吗 部分是表中的列之一 数据库是 SQL Server 2005 我想返回按输入日期排列的前 10 名 部分分为业务部分 本地部分和特色部分 对于某个特定日期 我
  • codeigniter CSRF 错误:“不允许您请求的操作。”

    我在 codeigniter 的配置文件中启用了 csrf protection 选项 并使用 form open 函数来创建我的表单 但是当我提交表单时 出现以下错误 不允许您请求的操作 我已经完成了类似这个主题的答案 与我的问题最相关
  • Pandas 列中所有字数的总和

    我有一个包含字符串的 pandas 列 我想获得整列中所有单词的字数 在不循环每个值的情况下执行此操作的最佳方法是什么 df pd DataFrame a some words lots more words hi 当运行于df a 你应该
  • 使用 Java 创建具有相似名称的文件而不覆盖现有文件

    我想知道是否可以创建多个具有相似名称的文件 而不覆盖当前文件 例如 如果我有一个文件 xyz txt 下次我创建它时应该是 xyz 1 txt try File makefile new File output txt FileWriter
  • c11 _Generic 泛型关联的结果表达式的每个分支都必须有效吗?

    我似乎无法将参数传递给需要不同参数的函数 或传递给实现第一个类型的子集的其他 Generic 宏 define DEBUG PRINT x Generic x debug print options DEBUG PRINT CUSTOM T
  • ORACLE NLS_LANG

    如何设置和检查NLS LANG设置 我做到了 set NLS LANG DANISH DENMARK WE8ISO8859P2 在命令提示符下 但我不知道它是否正确 这取决于操作系统和命令解释器 Linux bash echo NLS LA
  • CSS:根据其 href 设置链接样式

    我的网站上有一个我想要设置样式的第三方链接 但它没有任何我可以定位的类或 ID 它唯一拥有的就是它独特的 href 值 是否可以根据其 href 值设置锚标记的样式 您可以使用 href css 选择器来设置样式a基于链接的标签 a hre
  • 如何使用 Python 获取 SVG 路径的高度、宽度和长度?

    我有一个 svg 其中有大量这样的路径
  • FCM 字段“数据”必须是 JSON 数组

    您好 我正在与邮差一起制作我的 json 对象 FCM 消息 但是当我尝试发送时 to fzvihT7dFUI APA91bFVhnWAxXVjlWiiHIs9ZUyL1DE2hZO6GpItJtReh3hcKF1kD6mLuQq9fNP9
  • repz ret:为什么这么麻烦?

    的问题repz ret已经在这里介绍了 1 以及其他来源 2 3 还算满意 然而 在阅读这两个来源时 我找到了以下问题的答案 是什么actual定量比较中的惩罚ret or nop ret 尤其是在后一种情况下 当大多数函数要么有 100
  • 应用程序兼容主题的弹出菜单分隔线

    我使用了应用程序兼容主题样式
  • 在同一行上获取 2 个 div

    我试图让 2 个 div 位于同一行 我已经 div class header div class clear hideSkiplink div class menuDiv div div div
  • 创建带有滚动条的下拉列表

    我有一个包含选项列表的 HTML 下拉列表 当用户单击下拉列表时 应该会看到带有滚动条的前五个选项 我想使用 JavaScript 和 CSS 来实现这一点 由于我对这些不熟悉 请建议我如何使用滚动条显示下拉列表 以便能够滚动并从下拉列表中
  • RegOpenKeyEx() 错误

    我正在使用 Qt 和 mingw 来编写一个更改注册表的程序 但是当我调用时 RegOpenKeyEx HKEY LOCAL MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Defa
  • 实体框架 Fluent API 不考虑基类属性

    EF 6 1 我们刚刚启动了一个有很多继承的项目 选定的继承数据库映射类型是每个层次结构的表 问题是 当尝试使用 add migration 生成迁移时 会引发以下错误 The foreign key component VersionId
  • 如何向 Rails 应用程序添加 IP 限制?

    有没有办法向 Rails 应用程序添加 IP 限制 某种类型的机架中间件 出于安全原因 只有设定的 IP 列表才能访问 Rails 应用程序 Thanks 使用此处描述的路由约束 http guides rubyonrails org ro
  • 对两个条件查询使用相同的谓词

    我想使用相同的数组运行一对查询Predicate 一是统计记录数 一是获取某一页记录 对我来说 这似乎是一个非常正常的用例 所以一定有一个很好的方法来做到这一点 但我还没有找到它 这是获取实体的部分 CriteriaBuilder crit