天天看點

對Hibernate緩存機制的了解

在hibernate中session一級緩存機制中,有這麼一種情況:

問題描述:我需要new一個對象,對它的幾個字段指派,但是有一些屬性并沒有進行指派,然後調用

session.save()方法,在送出事務後,會出現這樣的情況:

1:在資料庫中有預設屬性的字段的值為空

2:既然是持久化對象,為什麼在最後對象拿不到預設屬性的值?

通過調試後解決方案如下:

對于問題一,如你在資料庫裡設定了字段的預設值,但是hibernate并不知道你不設定該屬性字段的值就要用表中字段預設值,那麼,你要進行如下配置:

<class  name="entity.Product" table="t_product" dynamic-insert="true">
           

 說明你要動态的插入你在資料庫中設定好的預設值

效果顯示:

測試前:

5 高爾夫球 20.3 15-6月 -15 -

測試後

6 高爾夫球 20.3 15-6月 -15 未知生産地

對于問題二,因為在你調用sava方法後,hibernate将此對象放入到它的容器中,對象從遊離态轉化為

持久化狀态,但并不代表你在送出事務後,就能将預設字段的值自動映射到被持久化映射的對象中。

你不執行和該對象有關的CRUD業務時,hibernate不會将預設值和該對象的屬性值所對應。最後,你

再調用一次session.get()方法後,可以發現對象和有預設屬性相對應的字段有你設定的預設值了~

追加一下,也可以使用session.refresh()方法将資料庫中的資料同步到緩存中~

最後,可以通過這個場景加深session一級緩存機制的了解,總結下面對緩存機制,應該有如下的思考:

(1)怎麼樣從緩存中提取出對象

(2)當緩存中的對象和資料庫中的資料不一樣的時候,怎麼樣把緩存中的資料同步到資料庫中

(3)當緩存中的對象和資料庫中的資料不一樣的時候,怎麼樣把資料庫中的資料同步到緩存中