2016-12-10 28 views
0

我不確定這種觀察效果是否歸因於Hibernate的會話緩存,但它在我看來是這樣。我目前正在對存儲在SSD上的H2(v1.4.x/MVCC)數據庫後端運行測試單元。我插入了10k +行,'純粹'JPA的性能非常差,我有一個CPU以最快速度運行,以每秒200-300的速度插入「常規」行。現在有趣的部分是:當我將每個插入語句('em.persist(...)')包裝到單獨的事務中並且在提交後立即將實體管理器中的持久對象「分離」出來時,速度提高了十倍。不知怎的,Hibernate似乎忘記了轉儲持久化對象並積累它們而沒有任何可檢測的限制。是默認的Hibernate(5.2.5)會話級緩存查殺性能嗎?

爲什麼默認的性能如此糟糕?真的沒有人關心這個,或者我在這裏錯了什麼?

由於某種原因,Hibernate抱怨JDBC連接最初不處於自動提交模式。這是相關的嗎?

回答

4

休眠似乎忘了傾銷持久對象

不,它不會忘記任何事情。它保持它們在會話中被有目的地管理,因爲不這樣做會違反它自己的合同:你應該能夠在被管理對象被保留後修改它,並且將這些改變保存在數據庫中。如果返回分離的對象,JPA將毫無用處。

當你需要插入大量元素(這不是Hibernate/JPA的用例)時,它不應該阻止你明確地將它們分開,as the documentation suggests doing

+0

嗯沒關係,所以這是一個用例問題。 TY。 – user1050755