hibernate batch-size抓取的问题。

王二北 2012-09-17 03:45:11
项目中有一个应用,A和B是一对一的关系,B通过外键关联A。并设置lazy=true。在页面上显示B的集合信息,同同时还要关联显示B对应的A的信息,如果不做任何处理,在lazy=true的情况下会出现n+1的问题,非常影响性能。所以决定使用batch-size进行优化,也就是在A的<class>上配置batch-size=30。
问题来了,如果正常情况下,每次抓取时应该抓取30个A,也就是会有30个?号,结果查看输出的sql语句,发现最多的一次是第一次有15个问号,也就是第一次抓取了15个A,后面又陆陆续续发出几次sql,每次问号的个数都小于10,数据库中B对应的测试数据大概有个30多条,如果正常情况下,应该发出37/30,应该是两条查询语句啊,不知为什么居然会发出七八条sql语句,且每次都不是按30个差的,很是奇怪,哪位高手了解这个是什么原因的,请帮帮忙吧,谢谢了啊。
B端对A的配置:
<many-to-one name="a" class="com.test.A"
column="aid" lazy="proxy" insert="false" update="false" />
A端class的配置:
<class name="com.test.A" table="t_a" batch-size="30">

求高手指点啊!!!!!!
...全文
170 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolfofshaolin 2013-06-29
  • 打赏
  • 举报
回复
batch-size 取值最优在3-10之间吧
xxy_aldrich 2013-06-26
  • 打赏
  • 举报
回复
hibernate 有个默认的batch-size list, 比如[1000, 500, 250, 125, 62, 31, 15, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1], 然后会去找<=数据集的大小,像楼主你说的37个,应该是第一次查询31条,第二次查询6条 楼主可以参考 https://forum.hibernate.org/viewtopic.php?p=2422139
王二北 2012-09-18
  • 打赏
  • 举报
回复
木有高手吗?来个人啊,谢谢了啊

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧