【问题标题】:how to implement Subqueries.rowCount(DetachedCriteria dc)如何实现 Subqueries.rowCount(DetachedCriteria dc)
【发布时间】:2013-02-21 15:39:52
【问题描述】:

当 DetachedCrieria 有投影时,如何获取 DetachedCriteria 结果集的行数?对于 HQL:

select count(*) from (select name, sum(grade) from score group by name)。

对于hibernate,如何实现Subqueries.rowCount(DetachedCriteria dc)?谢谢。

【问题讨论】:

    标签: hibernate subquery detachedcriteria


    【解决方案1】:

    如果你想要的只是计数,为什么不直接执行

    select count(name) from score group by name
    

    【讨论】:

    • 没有。这是一般要求。我们有一个 DetachedCriteria。如何获取查询结果的大小?
    • 执行它并查看返回的数字或结果? detachedCriteria.getExecutableCriteria(session).list().size()
    • 如果结果集有数百万个实体,是否会检索所有实体,然后计算其大小?如果它依赖于数据库,那么mysql呢?谢谢。
    • 如果你不想检索实体,你可以试试这个:detachedCriteria.getExecutableCriteria(session).setProjection(Projections.rowCount()).uniqueResult()。它采用您当前的标准并使用行数覆盖 select 子句。
    • 这在 detachedCriteria 没有投影时有效。但如果它已经有预测,它就行不通了。谢谢
    【解决方案2】:

    我遇到了同样的问题...我想出了以下解决方案并且它有效:

    myCriteria.setProjection(Projections.sqlProjection("count(*) as count from ( select distinct id , {alias}.enteredDate  ", new String[] { "count" }, new Type[] { StandardBasicTypes.LONG }));
    
    // this is needed to close the parentheses opened in the Projection
    myCriteria.add(Restrictions.sqlRestriction(" 1=1)"));
    

    【讨论】:

    • 最好在Hibernate中扩展一个类并实现它。即在DetachedCriteria生成的SQL中加入select count(*)。但是还没想好怎么弄。感谢分享。
    猜你喜欢
    • 2015-10-21
    • 1970-01-01
    • 2023-03-25
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多