我的应用程序使用Hibernate连接到SQL Server。我最近更改了我的DAO函数,该函数从“return query.getResultList()。get(0)”到“query.getSingleResult()”中的一个表中检索计数。 sql count()查询是通过namedQuery提供的。
当我做出这个改变时,我注意到Hibernate生成的SQL现在已经改变了 select count(test0_.TestId)为..... 至 选择前2个计数(test0_.TestId)为...
为什么Hibernate会转换为topSingleResult()的前2名而不是前1名? 有没有办法关闭Hibernate修改我的count()查询以使用前2?
由于
答案 0 :(得分:3)
为什么Hibernate会转换为前2位而不是topSingleResult()的前1位?
Hibernate选择2个条目以检查是否只有一个或多个条目。如果返回2,则会抛出异常,因为结果不是唯一的。如果使用top 1,Hibernate将无法判断是否会有更多。
答案 1 :(得分:1)
getSingleResult
会抛出异常。这样就可以检查是否返回了多行。