0

App使用JPA Hibernate,数据库是Sybase;每个域类型都有几个搜索屏幕。我知道 query.setMaxResult(limit) 会阻止查询返回太多。在 Sybase 的情况下,我相信它会被翻译成使用:

select top n from table --n = limit

但是,是否有我可以配置的全局设置,以便应用程序的所有查询都能识别此限制,它是什么以及如何使用?

后续问题是,然后我将配置 1 或 2 个查询以使其 setMaxResults 为限制 + 1000,执行 query.setMaxResult(limit+1000) 将覆盖全局设置正确吗?

4

1 回答 1

3

没有全局设置,你真的不想要这样的设置。确实,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

你最终会得到 A1 实体及其所有 B,而 A2 实体只有一个 B 而不是全部 3 个。

不过,没有什么能阻止您实现某种可重用的查询模板,它会自动应用最大结果。但是盲目地将其应用于所有查询是错误的。

于 2012-07-26T08:08:54.667 回答