当前位置: 首页 > 面试题库 >

Hibernate HQL:获取结果计数,而无需实际返回结果

庞鸿骞
2023-03-14
问题内容

我想获取动态生成的HQL查询的结果计数,而无需实际获取结果列表。说我的查询是这样的:

select Company company LEFT OUTER JOIN FETCH products product

我在Hibernate文档中看到:

您可以计算查询结果的数量而无需返回它们:

( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()

我怀疑应该用查询替换 .... ,但这不起作用,因为HQL不支持FROM中的子选择。

那么,我应该如何计算动态生成的HQL查询的结果?我认为通过执行它并获取结果列表的.size()可能是不必要的开销。

干杯!

更新:

我使用此正则表达式转换查询:

Number num = (Number) em.createQuery(dynamicQuery.replaceAll("select \\w+ from ", "select count(*) from ")).getSingleResult();

我得到这个:

块引用

EJB异常:嵌套的异常是:java.lang.IllegalArgumentException:org.hibernate.QueryException:查询指定的联接获取,但是选择列表中不存在所获取的关联的所有者[FromElement
{显式,不是集合联接,获取联接,非获取-懒惰的属性,classAlias =产品,role =
org.myCompany.applicant.entity.Applicant.products,tableName =
PRS_DEV.PRODUCT,tableAlias = products1_,origin = PRS_DEV.APPLICANT申请人0_,列=
{applicant0_.APPLICANT_ID,className = org。
myCompany.product.entity.Product}}] [
从org.myCompany.applicant.entity.Applicant申请人LEFT OUTER JOIN
FETCH申请人.products产品中
选择count( ];
嵌套的异常是:java.lang.IllegalArgumentException:org.hibernate.QueryException:查询指定的联接获取,但是选择列表中不存在所获取的关联的所有者[FromElement
{显式,不是集合联接,获取联接,非获取-懒惰的属性,classAlias =产品,role =
org.myCompany.applicant.entity.Applicant.products,tableName =
PRS_DEV.PRODUCT,tableAlias = products1_,origin = PRS_DEV.APPLICANT申请人0_,列=
{applicant0_.APPLICANT_ID,className = org。
myCompany.product.entity.Product}}]
[从org.myCompany.applicant.entity.Applicant申请人LEFT OUTER JOIN
FETCH申请人.products产品中选择count()]


问题答案:

这应该可以解决问题:

select count(*) FROM Company c JOIN ...

没有涉及子选择,只是返回而不是返回Company,而是返回计数。

编辑:FETCH是地方出来了。您不是从查询中返回实体,而是仅返回计数,因此,Hibernate抱怨。删除它应该可以帮助:

select count(product) from org.myCompany.applicant.entity.Applicant applicant 
    LEFT OUTER JOIN applicant.products product


 类似资料:
  • 我想从一个MariaDB数据库获取数据,并通过Maven安装了MariaDB JDBC连接器。下面的代码将数据的参数而不是实际的行/单元格数据添加到组合框中(请参见代码段,第10行)。这就是我要解决的问题。如果重要的话,我的表由1个int和4个varchar组成。 代码段(带行计数):

  • 我正在尝试用Akka / Scala编写一个actor,调用HTTP REST API并将结果发送回调用actor。API 可能会返回结果的集合/向量,必须首先将其转换为内部供应商中性格式,以便将来可以更改供应商,而无需对代码进行太多更改。大多数代码都在工作,但我不知道如何解压缩并发送内部向量。 这是我拥有的代码,它向调用的Actor返回一个。我想返回的是最终操作中创建的实际向量: 主叫演员: 如

  • 我们正在使用youtube v3搜索API。我们在“totalResults”计数和 response.items 字段中返回的项目列表中不匹配。我在请求中请求了 50 个视频。返回的响应显示总结果计数为 65,但响应负载只有 3 个视频。 API:www.googleapis.com/youtube/v3/search/list 请求有效载荷 响应有效载荷

  • 我有两个活动类和一个非活动类,它们从构造函数中传递的上下文调用startActivityForResult()。它看起来是这样的:FirstActivity- 不活跃 第二活动 第一活动

  • 问题内容: 我正在尝试创建一种方法,从中可以查询数据库并检索整个表。 目前,如果我使用这些数据只是正常工作 中 的方法。但是,我希望该方法返回结果。 我正在了解当前代码。 我该如何实现? 问题答案: 您永远不要通过公共方法来回避。这很容易导致资源泄漏,因为您不得不保持语句和连接打开。关闭它们将隐式关闭结果集。但是,将它们保持打开状态将导致它们悬而未决,并且当它们打开过多时,将导致数据库用尽资源。

  • 我想创建一个日历对象,并将其设置为某一年和该年中的一周。 当我将calendar对象传递给setWeekChecked方法时,这是它的toString: java.util.gregoriancalendar[time=?,arefieldsset=false,lenient=true,zone=America/New_York,firstDayofWeek=1,minimalDaysinfirs