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

标签 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 毫秒。 Foo 实体和 Bar 实体之间没有热切关系。为什么持久化上下文的大小会影响实体的加载时间?

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

最佳答案

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

您需要注意单个 session 中加载的对象数量,否则会遇到性能问题。

关于java - 为什么持久化上下文的大小会影响 Hibernate 中的查询时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7902844/

相关文章:

java - 使用 Volley、PHP 和 json 从 Android 中的 MySQL 服务器数据库检索单个数据

java - JPanel 的扩展类不显示 JPanel 的属性

java - 应用程序因 if 语句而崩溃

java - 如何在部署级别的 JPA persistence.xml 中指定不同数量的持久性单元

spring - 密封类作为一个实体

java - 如何使用枚举中的字符串值作为输入来输出 Java 中该枚举项的其余数据?

java - 为什么我运行 spring 和 Hibernate 项目时未创建数据库或表

java - 云应用程序使用多个架构还是单个架构?

java - 在 Hibernate 中使用 PreUpdate 监听器时记录未更新

java - @持久上下文: Could someone explain that annotation?