计算具有多列的不同 select 上的行数

Count rows on distinct select with multiple columns

我已经搜索了一段时间,但没有找到足够的答案来自己做这个。

我有一个 SQL 女士,看起来像这样:

select count(*) from 
   ( select distinct supplierName, supplierNr
   from dbo.InvoiceTypeBean
   ) as a

这个returns我想要的纯SQL

但我需要在休眠状态下使用标准 and/or detachedcriteria:

分离条件部分:

DetachedCriteria dCriteria = DetachedCriteria.forClass(clazz);
ProjectionList p = Projections.projectionList();
p.add(Projections.property("supplierName"));
p.add(Projections.property("supplierNr"));
dCriteria.setProjection(Projections.distinct(p));

问题是将其附加到条件:

Criteria criteria = session.createCriteria(clazz);
.... Some atachement
criteria.setProjection(Projections.rowCount());
int count = ((Number) criteria.uniqueResult()).intValue();

我真的需要使用 Criteria and/or DetachedCriteria 的解决方案,因为查询是动态构建的,并且使用它们构建更好的解决方案。

很好地找到了解决方案,我真正需要的只是在多列上使用 distinct 时输出的行数(我知道可以指定得更好)。

感兴趣的解决方案:

session.beginTransaction();
Criteria criteria = session.createCriteria(clazz);

ProjectionList p = Projections.projectionList();
p.add(Projections.property("supplierName"));
p.add(Projections.property("supplierNr"));
criteria.setProjection(Projections.distinct(p));

criteria.setResultTransformer(Transformers.TO_LIST);

ScrollableResults results = criteria.scroll();
results.last();
count = results.getRowNumber() + 1;
results.close();
session.getTransaction().commit();

有趣的部分是 scrollableresult 并且没有使用 DetachedCriteria。

我不确定,但我认为 ScrollableResults 的使用在大型记录集的情况下可能是一个严重的性能瓶颈。