java - 如何使用 MySQL 5 通过 Hibernate Criteria 查询获取行数?

标签 java mysql hibernate rowcount hibernate3

我们主要使用 HQL。但是我们有这个复杂的搜索表单,其中包含许多连接,所以我想我会尝试一下使用 Criteria 的运气(以前从未有过)。我更喜欢这种语法,它适合我们复杂的形式。

我的第一 react 是在应用 setMaxResultssetFirstResult 之前执行 .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/

相关文章:

java - SQLite JDBC Connection.preparedStatement 中的 NullPointerException

java - Intellij java类图,类之间的箭头

PHP MySQL 尝试加载数据

mysql - 选择 TIMESTAMP 字段时绕过 MySQL 自动 GMT 转换

java - 带有 GWT 的 HTML(不是文本)的多行省略号

java - 使用 IntelliJ IDEA 插件在 Siddhi SDK 中启动 HL7 服务时出现端口绑定(bind)错误

mysql - Unicode CSV 文件中未显示孟加拉语文本

java - 如何使用 Spring Batch 和 Hibernate 从 @JoinColumn 获取值

java - 具有多个数据库的 JPA (Hibernate)

java - 可以在 hibernate 状态 "and"中使用 "case when...then...else...end"吗?