Hibernate 3. BatchSize提取。集合中的实体被视为唯一对象(它们不是)

时间:2012-09-28 00:15:43

标签: hibernate

我有一个通过多对多关系与另一个类集合相关的类列表。学生有很多角色。

我在Student类中的一组角色中使用了BatchSize(size = 15),以防止在每次学生调用getRoles()时遇到N + 1问题。

我在数据库表中只有15个角色(因此BatchSize为15) 但是,我在运行应用程序后注意到的是,Hibernate尝试在前面加载15个角色,然后在迭代学生集合时根据需要加载越来越多。

不明白所有这些角色都是一样的吗?并且简单地在所有学生之间共享? 15个角色被带入SessionContext很多次。即使我预先通过单独的HQL查询加载所有15个角色,当我在第一个学生上调用getRoles()时,数据库仍会被命中。

所以我将BatchSize设置为1500以允许Hiberante预先加载AAAALLLL角色。那也行不通。在第一次查询时,它加载186,然后在第二次查询中再加载100和126。 <3 db命中率优于363(列表中的学生数),但仍然必须有更好的方法。

我的level2缓存已关闭,但我认为这与此无关。

感谢您的时间。

0 个答案:

没有答案