gpt4 book ai didi

java - JPA Hibernate 中的全局 setMaxResult

转载 作者:行者123 更新时间:2023-12-02 00:17:22 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com