【发布时间】:2015-07-31 10:56:47
【问题描述】:
我使用的是 Hibernate 4.2,并且我有一个父实体,其中包含一组子实体(一对多,获取类型是 LAZY 并带有 @BatchSize(size=100)) 注释。
如果我查询并加载几个父实体并调用访问包含子对象的集合,休眠将使用 @BatchSize 作为预期。
但是如果我调用 session、flush 然后做同样的事情,它只会为那个特定的父实体初始化集合。
这是 Hibernate 的预期行为吗?
编辑:示例
列出父母 = criteria.list() parents.get(0).getXs().get(0) // 触发加载所有父母的 Xs对比
列出父母 = criteria.list() session.flush() parents.get(0).getXs().get(0) // 触发仅加载第一个父级的 Xs【问题讨论】:
-
这与
Session.flush无关。你的意思是Session.clear? -
不,我确定我使用了会话刷新,我已经对此进行了测试。我知道如果我不调用 session.flush,那么我的问题就会得到解决。但我想知道这背后的理论。
-
你可以尝试使用HQL加载父母吗?