1.快照更新
hibernate的快照更新的理解:
hibernate在獲得持久化對象時,會在一級緩存和快照區(qū)同時保存一份相同的原始數(shù)據(jù)刮萌。
在對數(shù)據(jù)進行過更新維護之后驮配,提交事務(wù)時hibernate會自動將數(shù)據(jù)與快照區(qū)的原始數(shù)據(jù)進行對比,如果發(fā)現(xiàn)有差異着茸,則自動將原數(shù)據(jù)更新為維護之后的數(shù)據(jù)并提交事務(wù)壮锻。
有時對于簡單的數(shù)據(jù)更新,不想使用快照更新涮阔,可以在維護更新數(shù)據(jù)之后手動的save猜绣,這樣同樣可以完成數(shù)據(jù)的更新。但如果是非持久化數(shù)據(jù)敬特,手動save會將原始數(shù)據(jù)完全覆蓋掰邢,對于沒有進行維護的屬性,字段伟阔,會強行覆蓋為新數(shù)據(jù)辣之,如果沒有新數(shù)據(jù)那么置空。類似于merge操作皱炉。
2.Hibernate的一級緩存和二級緩存
Hibernate提供了兩級緩存:
第一級是`Session`的緩存怀估。由于Session對象的生命周期通常對應(yīng)一個數(shù)據(jù)庫事務(wù)或者一個應(yīng)用事務(wù),因此它的緩存是事務(wù)范圍的緩存。第一級緩存是必需的多搀,不允許而且事實上也無法比卸除歧蕉。在第一級緩存中,持久化類的每個實例都具有唯一的OID康铭。
第二級緩存是一個可插拔的的緩存插件惯退,它是由SessionFactory
負責管理。由于SessionFactory
對象的生命周期和應(yīng)用程序的整個過程對應(yīng)麻削,因此第二級緩存是進程范圍或者集群范圍的緩存蒸痹。這個緩存中存放的對象的松散數(shù)據(jù)。第二級對象有可能出現(xiàn)并發(fā)問題呛哟,因此需要采用適當?shù)牟l(fā)訪問策略叠荠,該策略為被緩存的數(shù)據(jù)提供了事務(wù)隔離級別。緩存適配器用于把具體的緩存實現(xiàn)軟件與Hibernate集成扫责。第二級緩存是可選的榛鼎,可以在每個類或每個集合的粒度上配置第二級緩存。