那時初入職場,mybatis并沒有在中國有絕對的占有率。我一個人在小公司里想用什么就用什么,所以理所當然的用起了hibernate。轉眼間已經過了很多年了,最近有朋友介紹項目,時間寬裕,技術路線自己定。我又把hibernate拿出來用用。
曾經對部分hibernate的理解已變淡。spring配置方式也從xml變?yōu)樽⒔庥旨訌姙閟pring boot。但是hibernate的臟檢查是不得不提的重點?,F(xiàn)在網上這方面的總結很少都是片段提到,甚至在文檔中的介紹也很簡單,我看了幾遍也沒得到全面的認識。因此我把最近的理解寫下來。
hibernate的臟檢查分為 掃描和觸發(fā)
掃描就是加載時保存一份快照,提交時把所有的實體和之前的快照對比,不同的說明就是臟數(shù)據,需要更新到數(shù)據庫。
觸發(fā)就是程序調用set時,如果值變了就標記為臟 ,需要更新到數(shù)據庫 。
默認為掃描,聽起來就性能很差,特別是實體比較多的時候,當然一般情況也性能也不會很差。在hibernate3以前,只有掃描這種模式。
觸發(fā)分兩種,一種是加載時織入觸發(fā)代碼,一種是編譯時織入觸發(fā)代碼。
加載時織入觸發(fā)代碼只有spring中開啟@EnableLoadTimeWeaving加配置才會生效(這個配置未來會取消)

spring boot開啟加載時臟檢查的配置
編譯時織入只需配置插件即可使用,在hibernate文檔的Bytecode Enhancement欄可以看到。
加載時織入和編譯時織入可以同時存在,當加載時織入程序檢測到實體已經被編譯時織入增強則不會繼續(xù)增強。