Hibernate中的find與普通createQuery的區別
Hibernate中的find是根據主鍵首先去緩存中查找,找到就直接返回,找不到就接著去數據庫中查找;
而createQuery直接就去數據庫中查找,不管緩存中是不是已經存在了;
兩者一般情況下邏輯效果是一樣的,只是性能上有些差別,但有些特定情況下就不同了。
輸入一批“水表數據信息”,循環處理這些信息,當水表信息表示的水表不在數據庫中時就根據這些信息構造水表實體存入數據庫,輸入的“水表數據信息”可能有相同的水表信息,這樣就會有多次查找同樣水表的查詢,但他們返回的結果不應當是相同的,第一次沒查到就新建一個,再次查詢時應該能查到,否則水表就會重復了。這時候Hibernate find與普通createQuery的區別就顯示出來了,新建后再find同樣的水表就會查出剛剛建立的水表(雖然他還沒有進入數據庫,因為循環完后才commit),而createQuery每次查詢結果都相同(查不到,因為數據庫里沒有該水表),這樣就會新建多個相同的水表,導致數據庫主鍵重復異常。
【編輯推薦】