getSingleResult() 改变 count() 查询

Posted

技术标签:

【中文标题】getSingleResult() 改变 count() 查询【英文标题】:getSingleResult() alters the count() Query 【发布时间】:2011-11-07 16:39:01 【问题描述】:

我的应用程序使用 Hibernate 连接到 SQL Server。我最近更改了我的 DAO 函数,该函数从“return query.getResultList().get(0)”到“query.getSingleResult()”中的一个表中检索计数。 sql count() 查询是通过 namedQuery 提供的。

当我进行此更改时,我注意到 Hibernate 生成的 SQL 现在已从 选择计数(test0_.TestId)作为..... 到 选择前 2 个计数(test0_.TestId)作为...

为什么 Hibernate 会为 getSingleResult() 转换为 top 2 而不是 top 1? 有没有办法关闭 Hibernate 修改我的 count() 查询以使用前 2?

谢谢

【问题讨论】:

【参考方案1】:

为什么 Hibernate 会为 getSingleResult() 转换为前 2 而不是前 1?

Hibernate 选择 2 个条目以检查是否只有一个或多个。如果返回 2,则会抛出异常,因为结果不是唯一的。如果使用 top 1,Hibernate 将无法判断是否还有更多。

【讨论】:

【参考方案2】:

getSingleResult 如果结果不完全一致,则抛出异常。这样它就可以检查是否返回了多行。

【讨论】:

以上是关于getSingleResult() 改变 count() 查询的主要内容,如果未能解决你的问题,请参考以下文章

在 getSingleResult 聚合中处理 null 的正确方法

JPA getSingleResult() 或 null

getSingleResult 在休眠中返回本地标量查询的代理

getSingleResult 和 selectone

在C++程序设计中,表示输入和输出是要加两个大于号或小于号,例如,cin>>r. coun

Grafana 使用 http_server_requests_seconds_count 绘制每分钟的 HTTP 请求数