为什么持久化上下文的大小会影响Hibernate中的查询时间

时间:2011-10-26 12:52:07

标签: java hibernate jpa

for(int i = 0; i < 10000; i++) {
  Foo foo = dao.loadFooById(i);
}
//dao.getEntityManager().clear();
Bar bar = dao.loadBarById(0);

目前,loadBarById(0)方法的代码需要200毫秒。如果我取消注释注释行,则需要<1 ms。 Foo实体和Bar实体之间没有紧密的关系。为什么持久化上下文的大小会影响实体的加载时间?

仅供参考:我知道我将遇到具有大型持久性上下文的各种其他问题,并且我应该通过对批量实体进行操作来管理它。这只是为了我自己的理解。

1 个答案:

答案 0 :(得分:2)

PersistenceContext(Hibernate Session)是各种值和代理的缓存。如果事务处于活动状态,则回滚信息也会存储在某处。清除持久性管理器/会话使缓存工作更快。

您需要注意在单个会话中加载的对象数量或遇到性能问题。