Hibernate Criteria - 获取subselect的计数

时间:2015-01-01 09:05:35

标签: java hibernate jpa count criteria

我想计算满足特定条件的事件数量。如果行数少于一百万,我想得到实际的数字。如果它超过一百万,我不需要知道确切的数字,可以将计数返回为100万。

我考虑过这个问题

select count(*) from (select id from events where x=10  limit 1000000) a

如何完成分离标准/子标准?

除了上面的sql之外,还有更好的方法吗?我使用的是postgresql 9.3

2 个答案:

答案 0 :(得分:1)

该查询的效果不如常规计数,因此请尝试以下方法:

long count = ((Number) 
    session.createCriteria(Event.class)
           .setProjection(Projections.rowCount())
           .add(Restrictions.eq("x", 10))
           .uniqueResult()).longValue();
long countLimit = Math.min(count, 1000000);

答案 1 :(得分:0)

据我了解 你必须计算一些重新编码,如果它是> 1000000它应该显示1百万+ 否则准确计数。 为此你可以尝试这个查询

String t;
            t = (String) session.createQuery(
                    "select case when count(*)>1000000   "
                    + "then '1Million +' "
                    + "else count(*) "
                    + "end "
                    + "from events").uniqueResult();
               session.getTransaction().commit();

               System.out.println("size is " + t);

使用CASE [ WHEN {test_conditional} THEN {match_result} ]* ELSE {miss_result} END https://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html/ch11.html#d5e3280