JPA Hibernate中的全局setMaxResult

时间:2012-07-26 07:14:48

标签: java hibernate jpa limit sybase

App使用JPA Hibernate,数据库是Sybase;它为每种域类型提供了多个搜索屏幕。我知道query.setMaxResult(limit)会阻止查询返回太多。对于Sybase,我相信它将被翻译为使用:

select top n from table --n = limit

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

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

1 个答案:

答案 0 :(得分: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实体及其所有Bs,而A2实体只有一个B而不是全部3个。

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