我有一个基于标准的查询,具有以下分组:
Projections.projectionList()
.add(Property.forName("xyz").group()));
生成的 SQL 是(专有的,因此已清理):
select this_.XYZ as y0_ from FOO.BAR this_ WHERE [long where clause]
group by this_.XYZ
现在,从概念上讲,我想用 count(*) 包装查询结果,这样数据就永远不会从数据库中返回,而只是计数。像这样:
select count(*) from (
select this_.XYZ as y0_ from FOO.BAR this_ WHERE [long where clause]
group by this_.XYZ
)
可能有数千行我不需要并且我对高性能感兴趣,所以我不希望这些数据通过网络传输。
我的基于条件的搜索有许多条件。我无法真正重建它,所以我真的需要坚持使用 Criteria。
当然,添加 rowCount 或 count("xyz") 没有帮助,因为它只为每一行报告 1。
我目前正在这样做以获取计数:
ScrollableResults scroll = criteria.scroll();
scroll.last();
int count = scroll.getRowNumber();
它有效,但需要很长时间才能返回计数(如果重要,请在 Oracle 上)。
我可以按照我的提议去做吗?