App使用JPA Hibernate,数据库是Sybase;它为每种域类型提供了多个搜索屏幕。我知道query.setMaxResult(limit)会阻止查询返回太多。对于Sybase,我相信它将被翻译为使用:
select top n from table --n = limit
但是,我可以配置是否存在全局设置,以便应用的所有查询都能识别此限制,它是什么以及如何使用?
后续问题是,我将配置1或2个查询以使其setMaxResults说限制为+ 1000,执行query.setMaxResult(limit + 1000)将覆盖全局设置更正?
答案 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个。
但是,没有什么禁止您实现某种可重用的查询模板,该模板会自动应用最大结果。但盲目地将它应用于所有查询都是错误的。