如何配置Hibernate Search批量抓取数据库行以规避SQL Server参数限制?
解决Hibernate Search结合SQL Server时的2100参数限制问题
当Hibernate Search返回大量匹配文档后,默认会用单条带大IN子句的查询加载实体,这就触发了SQL Server的The incoming request has too many parameters. The server supports a maximum of 2100 parameters限制。你可以通过配置Hibernate Search的批量抓取参数来解决这个问题,具体分版本操作:
Hibernate Search 6.x
- 实体级配置:在标注
@Indexed的实体类上,通过idFetchSize属性指定批次大小(建议设为2000,留足SQL Server参数上限的余量):@Indexed(idFetchSize = 2000) @Entity public class YourEntity { // 实体内容 } - 全局配置:如果要统一应用到所有索引实体,可在配置文件中添加全局参数:
# Spring Boot环境示例 hibernate.search.id_fetch_size=2000
Hibernate Search 5.x
- 对应配置参数为
hibernate.search.query.loading.batch_size,同样设置为2000即可:<!-- hibernate.cfg.xml示例 --> <property name="hibernate.search.query.loading.batch_size">2000</property># Spring Boot环境示例 hibernate.search.query.loading.batch_size=2000
原理说明
设置该参数后,Hibernate Search会将匹配到的实体ID列表拆分成多个批次,每个批次执行一次带IN子句的查询,每个查询的参数数量不超过你设置的批次大小,从而避开SQL Server的2100参数上限限制,最终合并所有批次的查询结果返回。
内容的提问来源于stack exchange,提问作者Guillaume Delafosse
相关产品推荐
相关产品推荐

