这是我的第一篇文章,我通常会在这里找到答案,但这次我很难过 .

下面是两个sql查询 - 首先获取值然后对结果执行“总和”几乎将持续时间减半,但使用Hibernate Criteria复制它并不是那么简单 .

从相关的帖子我发现看起来答案很可能是一些DetachedCriteria函数,但我找不到任何与“sum”一起使用的例子 .

SELECT (COUNT(DISTINCT(account))) FROM history;
duration 6363ms

SELECT COUNT(*) FROM (SELECT DISTINCT account);
duration 3624ms

我的第一个查询的Hibernate标准:

Session session = sessionFactory.openSession();

    ProjectionList proj = Projections.projectionList()
            .add(Projections.countDistinct("account"));

    Criteria crit = session.createCriteria(History.class)
        .setProjection(proj);

    System.out.println(crit.list());