我在批量数据库导出应用程序中使用Hibernate。在阅读了许多关于会话缓存的问题/答案和文章后,我仍然不理解以下内容:
假设每个HQL加载实体列表以迭代它并读取引用的对象/集合的值。在这种情况下会引用会话缓存中保存的对象/集合吗?
答案 0 :(得分:0)
是的。
执行HQL查询时,必须在当前会话中加载所有返回的实体。这是因为实体处于ATTACHED状态,因此任何修改都可以通过"脏检查机制检测到。
如果您要插入大量实体,则每批次后flush() and clear()更好,以便您从当前的第1级删除当前条目,因为您不需要无论如何,他们都在下一批。
如果要检索适合当前RAM的大型实体集合,并且希望在给定实体上操作的整个时间内附加实体,则在批处理结束时将刷新,并逐出()当前处理的实体。这次你不清楚(),因为你仍然希望保留未处理的实体,以便Hibernate可以将更改传播到数据库。