休眠条件限制机制?

2022-09-02 10:18:17

休眠条件支持提供了一种限制从 db 返回的结果的方法。setMaxResults()

我在他们的文档中找不到任何答案 - 这是如何实现的?它是否查询整个结果集,然后只返回请求编号?或者它是否真的限制了数据库端的查询(想想mySql中的LIMIT关键字)。

这很重要,因为如果一个查询可能返回许多很多结果,我真的需要知道will是否仍然查询数据库中的所有行(这将是不好的)。setMaxResults()

另外 - 如果它真的限制了数据库端的行数,它是如何实现这种跨数据库的(因为我不认为每个rdbms都像mySql那样支持LIMIT功能)。


答案 1

Hibernate 要求数据库限制查询返回的结果。它通过方言做到这一点,方言使用任何特定于数据库的机制来做到这一点(所以对于SQL Server,它会做类似“从表中选择top n *”,Oracle会做“从表中选择*,其中rownum<n”,MySQL会做“从表限制n中选择*”等)。然后,它只返回数据库返回的内容。


答案 2

该类包含一个名为 的方法。如果方言子类重写此方法,它们可以以其数据库风格固有的方式实现行限制处理。你可以在 org.hibernate.loader.Loader.Loader 类中看到从哪里调用此代码,该类有一个标题为 的方法,只需搜索字数限制即可。org.hibernate.dialect.DialectsupportsLimit()prepareQueryStatement

但是,如果方言不支持此功能,则会对迭代器进行硬检查,以确保在达到限制时停止构造 Java 对象(实体)结果。此代码也位于 中。ResultSetLoader


推荐