App使用JPA Hibernate,数据库为Sybase;它针对每种域类型都有多个搜索屏幕。我知道 query.setMaxResult(limit) 将防止查询返回太多。对于 Sybase,我相信它会被翻译为使用:
select top n from table --n = limit
但是,是否有一个全局设置可供我配置,以便应用程序的所有查询都能识别此限制,它是什么以及如何使用?
接下来的问题是,我将配置 1 或 2 个查询,使其 setMaxResults 为 limit+1000,执行 query.setMaxResult(limit+1000) 将覆盖全局设置正确?
最佳答案
没有全局设置,而且您确实不想要这样的设置。事实上,setMaxResults()
对于大量查询来说没有意义。
特别是,如果查询加载一个实体和至少一个一对多关联,则不应使用 setMaxResults()
。它限制从数据库返回的行数,而不是从查询返回的实体数。因此,假设您有具有以下关联的实体 A 和 B:
A1 - B1
A1 - B2
A1 - B3
A2 - B4
A2 - B5
A2 - B6
想象一下您执行以下查询:select a from A a left join fetch a.b
。如果将最大结果设置为 4,则返回的行可能为
A1 - B1
A1 - B2
A1 - B3
A2 - B4
最终您将得到具有所有 B 的 A1 实体,以及仅具有一个 B 而不是全部 3 个 B 的 A2 实体。
不过,没有什么可以禁止您实现某种可重用的查询模板,该模板会自动应用最大结果。但盲目地将其应用于所有查询是错误的。
关于java - JPA Hibernate 中的全局 setMaxResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11664244/