joh*_*ohn 18 java sql hibernate criteria
Hibernate Criteria支持提供了setMaxResults()
一种限制db返回结果的方法.
我在他们的文档中找不到任何答案 - 这是如何实现的?是查询整个结果集然后只返回请求号吗?或者它是否真正限制了数据库端的查询(想想在mySql中的LIMIT关键字).
这很重要,因为如果一个查询可能会返回许多结果,我真的需要知道它是否setMaxResults()
仍然会查询数据库中的所有行(这会很糟糕).
另外 - 如果它真正限制了数据库端的行数,它是如何实现这个跨db的(因为我不认为每个rdbms都支持像mySql那样的LIMIT功能).
Rit*_*esh 13
Hibernate要求数据库限制查询返回的结果.它通过方言来实现,它使用任何特定于数据库的机制来执行此操作(因此对于SQL Server,它将执行类似"从表中选择顶部n*"的操作,Oracle将执行"select*from table in rownum <n ",MySQL将执行"select*from table limit n"等.然后它只返回数据库返回的内容.
该类org.hibernate.dialect.Dialect
包含一个名为的方法supportsLimit()
.如果方言子类重写此方法,则它们可以以其数据库flavor的本机方式实现行限制处理.您可以在类org.hibernate.loader.Loader中查看此代码的调用位置,该类具有标题的方法prepareQueryStatement
,只搜索字数限制.
但是,如果方言不支持此功能,则会对ResultSet
迭代器进行硬性检查,以确保在达到限制时将停止构建Java对象(实体)结果.此代码也位于Loader
此处.
HQL 不支持像 SQL 中那样的查询内部限制,仅支持setMaxResults()
您也发现的限制。
要查明它是否将其转换setMaxResults()
为 LIMIT 查询,您可以打开 SQL 日志记录。
归档时间: |
|
查看次数: |
26866 次 |
最近记录: |