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实体之间没有紧密的关系。为什么持久化上下文的大小会影响实体的加载时间?
仅供参考:我知道我将遇到具有大型持久性上下文的各种其他问题,并且我应该通过对批量实体进行操作来管理它。这只是为了我自己的理解。
答案 0 :(得分:2)
PersistenceContext(Hibernate Session)是各种值和代理的缓存。如果事务处于活动状态,则回滚信息也会存储在某处。清除持久性管理器/会话使缓存工作更快。
您需要注意在单个会话中加载的对象数量或遇到性能问题。