问题标签 [criteriaquery]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
123 浏览

jpa - 如何将 Query 转换为 CriteriaQuery

我知道我们可以使用以下代码从标准查询创建查询:

现在我将知道如何将 Query 转换为 CriteriaQuery?

0 投票
2 回答
27408 浏览

java - JPA Criteria query group by 仅使用 id

这是一个示例实体:

现在我使用 Join 创建一个条件查询,如下所示:

上面的代码生成如下 Sql 命令:

上面的代码在 PosgreSQL 中工作,但不能在 Oracle 中运行,因为在其中选择了没有出现在 group by 子句中的 accType.name。

更新
我认为我的问题对你来说并不清楚。我的问题不是关于group by. 我的问题是:
我使用typeJoiningroup by子句(这意味着我希望休眠使用 AccountType in 的所有字段group by),但为什么休眠只使用身份字段group by?如果我只使用身份字段,group by那么我可以使用以下语句:

0 投票
1 回答
1637 浏览

java - 在 JPA 中:使用 CriteriaQuery 计算带有 where 子句的查询结果

我对 JPA 比较陌生,它是 CriteriaBuilder / CriteriaQuery API:

我想查询一组对象的提取(如下所示,我只选择元素 n 到 m 的结果)

查询本身运行良好,我得到了我期望的结果。

但是如果我尝试计算全部可能的结果,我会得到一个 java.lang.IllegalArgumentException:

org.hibernate.hql.internal.ast.QuerySyntaxException: 无效路径: 'generatedAlias1.prop1' [从 com.myCompany.blablub.MyClass 中选择 count(generatedAlias0) as generatedAlias0 where (1=1) and (generatedAlias1.prop1=:param0) )]"

我希望你能给我一个提示我做错了什么。

我想我明白我的问题出在哪里了。

该行为仅在我使用联接时出现。

没有连接的查询如下所示:

但是当我想使用连接时,它看起来像这样:

而没有计数的查询看起来像这样:

它显然不知道 generatedAlias1 是什么,因为整个连接都丢失了。有谁知道我该如何解决这种行为?

0 投票
0 回答
3261 浏览

java - jpa2 CriteriaBuilder order by“ORDER BY 表达式必须出现在选择列表中”

我正在使用CriteriaBuilder编写查询,但无法添加order by子句,因为它引发的错误消息ORDER BY 表达式必须出现在选择列表中,这是我的实体。

我的查询看起来像这样。

这是hibernate生成的sql。

如你看到的。B它不在select子句中。那么,我如何添加B

0 投票
1 回答
641 浏览

hibernate - jpa 2 CriteriaQuery 不区分子实体

我有一个与另一个实体有一对多关系的实体。说

我写了这个查询。

问题:查询返回所有子实体,而不仅仅是那些满足between约束的子实体。

所以即使A有 3 个子B并且只有两个符合条件,查询总是返回 3 B's

签入休眠生成的sql,我可以看到这个。

这很好,检索到的所有实体A都符合条件,但随后会引发第二个查询以获取B实体。

这是错误的,因为选择应该是

我曾经遇到过这个问题,但是我的查询没有使用CriteriaBuilder,并且通过使用JOIN FETCH解决了,但是使用CriteriaQuery我无法解决它。

0 投票
2 回答
9678 浏览

java - JPA 标准查询 - 如何避免重复连接

我需要使用大量条件联接和 where 子句进行条件查询,在这种情况下,代码往往会变得复杂并且可能会产生重复的联接。

例如,我有以下表结构和 JPA 实体:

所以假设我使用静态元模型实现来应用标准查询。

这是可以生成重复连接的错误代码示例:

上面的代码将生成一个 SQL 与同一个表的多个连接:

一个简单的解决方案是保留 Joins 的实例以在多个谓词中重用,例如:

好的,它可以工作,但是对于具有多个表和代码条件连接的真正复杂代码往往会变成意大利面条代码!相信我 !

避免它的更好方法是什么?

0 投票
0 回答
1669 浏览

java - JPA TypedQuery getResultList() performance is very slow

My code looks like:

Generated SQL (example with reduced columns in select clause) looks like:

Same query when executed in SQL developer, takes around 0.3 seconds. Please note that same query if executed using java.sql.Statement.executeQuery(), takes around 0.4 seconds to fetch data from database. Please note that database is Oracle 11g. JDK version is 1.7.0_51.

JPA entity for Table1 looks like:

Can you please provide me with an hint regarding where shall I start looking to improve performance in this scenario? Please let me know, if you require more information.

0 投票
1 回答
1390 浏览

hibernate - 如何根据以小时为单位的整数字段进行限制大于期间的休眠条件查询

假设我有以下实体:

因此,我需要在 hoursMax 整数字段的周期最大值中通过 createAt 日期字段对订单限制进行条件查询。我看到很多使用 Date 实例 java 减去整数文字值(以小时为单位)的示例,如下例所示:

但是,在这种情况下,我需要使用代表这个最大周期的字段 hoursMax 我应该放入什么????以下 ?

注意:另外,我想避免对 hoursMax 执行额外的预查询。

0 投票
1 回答
2679 浏览

hibernate - 如何编写 JPA 查询来填充数据传输对象(不同于我的 @Entity 对象)?

我们正在使用 Java 6、JPA 2.1 和 Hibernate 4.3.6.Final。我有下面的代码可以找到我们的组织对象......

这些组织对象是数据密集型对象。我们有一个数据传输对象,OrganizationDto,它只包含组织字段的一个子集。有没有办法配置上述内容来填充 OrganizationDto 对象而不是 Organization 对象?我想避免的是获取结果集,然后编写一个 for 循环来遍历所有内容并创建所有数据传输对象。如果查询能够以某种方式立即填充这些数据传输对象,那就太好了。

0 投票
1 回答
95 浏览

java - 添加或条件时条件查询未获取数据

我有一个查询数据的 Java 文件,我正在尝试添加过滤功能。通过使用标准构建器和标准查询,我设法获取我想要过滤的数据。

首先,这是显示我的数据的列:

这里使用了 3 个变量。名称列显示来自名称的数据。对于 Host 列,这有点棘手。它将显示主机名,但如果有 logAsHost 显示,此数据将覆盖主机名。

所以这就是我的数据的真实样子:

当我尝试仅过滤 1 个变量时,我设法做到了。(例如,按名称过滤)。当我尝试过滤掉 2 个变量时,就会出现问题。我没有设法获得任何数据。

这是我使用的代码:

此日志显示数据是否可用:

我使用c.get(Connection_.hostname),并传递u给 hostFilter,

我使用c.get(Connection_.logAsHost),并传递u给 hostFilter,

我将两者结合并传递u给hostFilter,

我假设cb.or()是导致此错误。如果是这样,如何在条件查询中正确使用 OR 条件?我正在关注 or(Expression<java.lang.Boolean> x, Expression<java.lang.Boolean> y)文档中的这一部分。