Java 默认的Hibernate(5.2.5)会话级缓存是否会终止性能?
我不确定观察到的这种影响是否是由于Hibernate的会话缓存造成的,但在我看来是这样的。我目前正在针对存储在SSD上的H2(v1.4.x/MVCC)数据库后端运行测试单元。我正在插入10k+行,“纯”JPA的性能非常差,我有一个CPU以最大速度运行,以每秒200-300的速度插入“常规”行。现在有趣的部分是:当我将每个insert语句('em.persist(…)')包装到一个单独的事务中,并在提交后立即将持久化对象从实体管理器中“分离”出来时,速度提高了十倍。不知何故,Hibernate似乎忘记了转储持久化对象,并在没有任何可检测限制的情况下对它们进行累积 为什么默认性能如此糟糕?真的没人在乎吗?或者我到底做错了什么 出于某种原因,Hibernate抱怨JDBC连接最初没有处于自动提交模式。这有关系吗 Hibernate似乎忘记了转储持久化对象 不,它不会忘记任何东西。它故意在会话中对它们进行管理,因为不这样做会违反它自己的约定:您应该能够在托管对象被持久化后修改它,并将这些更改保存在数据库中。如果JPA返回分离的对象,它将非常无用 当您需要插入大量元素时(这不是Hibernate/JPA设计的用例),如果需要的话,这不应该阻止您显式地分离它们 Hibernate似乎忘记了转储持久化对象 不,它不会忘记任何东西。它故意在会话中对它们进行管理,因为不这样做会违反它自己的约定:您应该能够在托管对象被持久化后修改它,并将这些更改保存在数据库中。如果JPA返回分离的对象,它将非常无用Java 默认的Hibernate(5.2.5)会话级缓存是否会终止性能?,java,performance,hibernate,jpa,h2,Java,Performance,Hibernate,Jpa,H2,我不确定观察到的这种影响是否是由于Hibernate的会话缓存造成的,但在我看来是这样的。我目前正在针对存储在SSD上的H2(v1.4.x/MVCC)数据库后端运行测试单元。我正在插入10k+行,“纯”JPA的性能非常差,我有一个CPU以最大速度运行,以每秒200-300的速度插入“常规”行。现在有趣的部分是:当我将每个insert语句('em.persist(…)')包装到一个单独的事务中,并在提交后立即将持久化对象从实体管理器中“分离”出来时,速度提高了十倍。不知何故,Hibernate似乎
当需要插入大量元素(这不是Hibernate/JPA设计的用例)时,这不应该阻止您在需要时显式地分离它们。hmm好的,所以这是用例的问题。好吧,这是一个用例问题。泰。