java - 标准 api - 非法状态异常
问题描述
我使用 Criteria Api 编写了以下代码:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Entity> criteriaQuery = criteriaBuilder.createQuery(Entity.class);
Root<Entity> root = criteriaQuery.from(Entity.class);
criteriaQuery.select(root);
CriteriaQuery<Long> countQuery = criteriaBuilder.createQuery(Long.class);
countQuery.select(criteriaBuilder.count(root));
Long countOfRows = entityManager.createQuery(countQuery).getSingleResult();
结果我得到一个例外:
java.lang.IllegalStateException:未指定条件查询根
异常由getSingleResult方法(代码的最后一行)引发。谢谢你的帮助!
解决方案
它在强制countQuery添加根后起作用:
((QueryStructure)((CriteriaQueryImpl)countQuery).queryStructure).roots.add(root)
推荐阅读
- javascript - 如何使 RegExp 仅从任意索引开始找到第一个匹配项?
- mysql - 更新表以增加每个用户 ID 的值
- php - Laravel 从 MySQL 列中获得不同的价值不起作用
- xaml - 使用 XAML 设计器时出现 XamlParseException
- jenkins - RTC Post 构建交付在 Jenkins 上出现 statusCode=400 错误
- java - 使用 Java 和 JMH 对无锁堆栈进行基准测试
- ruby-on-rails - 新 Rails 应用程序的 /tmp/cache/ 中的文件(258 个目录,1404 个文件)
- git - “拆分和拼接”可以管理包含大量文件的 GIT 存储库吗?
- javascript - 如何在 jQuery Validate Engine 上执行 minCheckBox 验证?
- sql-server - 子表单查询标准正在延续到新记录