for(int i = 0; i < 10000; i++) {
Foo foo = dao.loadFooById(i);
}
//dao.getEntityManager().clear();
Bar bar = dao.loadBarById(0);
就目前而言,这段代码对于 loadBarById(0)
方法需要 200 毫秒。如果我取消注释注释行,则需要 <1 毫秒。 Foo 实体和 Bar 实体之间没有热切关系。为什么持久化上下文的大小会影响实体的加载时间?
仅供引用:我知道我会遇到具有大量持久性上下文的各种其他问题,我应该通过对实体的批处理进行操作来管理它。这只是我自己的理解。
最佳答案
PersistenceContext (Hibernate Session) 是各种值和代理的缓存。如果事务处于 Activity 状态,回滚信息也会存储在某处。清除持久性管理器/ session 使缓存工作得更快。
您需要注意单个 session 中加载的对象数量,否则会遇到性能问题。
关于java - 为什么持久化上下文的大小会影响 Hibernate 中的查询时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7902844/