我们主要使用 HQL。但是我们有这个复杂的搜索表单,其中包含许多连接,所以我想我会尝试一下使用 Criteria 的运气(以前从未有过)。我更喜欢这种语法,它适合我们复杂的形式。
我的第一 react 是在应用 setMaxResults
和 setFirstResult
之前执行 .list().size()
。当然,这又慢又懒,而且非常消耗资源。
经过一番谷歌搜索后,我发现了一个使用 ScrollableResults 的示例。但帖子说MySQL不支持游标。这是 2004 年的帖子。2012 年,我们使用 MySQL 5 和 InnoDB 表。所以我认为我们支持游标。然后我发现可以使用投影。
所以,作为一个 Hibernate 专家,我迷失了最好的方法。我们将来可能使用 DB2,所以我想我使用的任何解决方案都必须在 DB2 和 MySQL 5 中工作。
有什么想法吗?我想至少我可以使用自定义 HQL 来获取计数(*)。
谢谢
更新
我刚刚将其放入:
ScrollableResults scr = crit.scroll();
scr.last();
int rowCount = scr.getRowNumber() + 1;
对比
int rowCount = crit.list().size();
两者都是在我设置限制/起始值之前。它跑得快得多。所以我假设游标正在处理特定的数据库和结果。我什至在那里添加了一些连接,它似乎仍然快得多。
对于这是否仍然是一个好主意有什么意见吗?
最佳答案
您可以使用 Criteria 的 setProjection(Projections.property("id"))
。
关于java - 如何使用 MySQL 5 通过 Hibernate Criteria 查询获取行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13311750/