【发布时间】:2011-01-13 00:01:41
【问题描述】:
我想获取动态生成的 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{explicit,not a collection join,fetch join,fetch non -lazy properties,classAlias=product,role=org.myCompany.applicant.entity.Applicant.products,tableName=PRS_DEV.PRODUCT,tableAlias=products1_,origin=PRS_DEV.APPLICANT申请人0_,colums={applicant0_.APPLICANT_ID,className=org. myCompany.product.entity.Product}}] [select count() from org.myCompany.applicant.entity.Applicant 申请者 LEFT OUTER JOIN FETCH 申请者.products 产品 ];嵌套异常是:java.lang.IllegalArgumentException:org.hibernate.QueryException:查询指定连接提取,但选择列表中不存在提取关联的所有者 [FromElement{explicit,not a collection join,fetch join,fetch non -lazy properties,classAlias=product,role=org.myCompany.applicant.entity.Applicant.products,tableName=PRS_DEV.PRODUCT,tableAlias=products1_,origin=PRS_DEV.APPLICANT申请人0_,colums={applicant0_.APPLICANT_ID,className=org. myCompany.product.entity.Product}}] [select count() from org.myCompany.applicant.entity.Applicant 申请者 LEFT OUTER JOIN FETCH 申请者.products 产品]
【问题讨论】: