Hibernate @Cache 注解

本文主要摘自Hibernate緩存俗扇,整理些要點出來

Hibernate查詢緩存依賴于二級緩存止潘。當啟用查詢緩存后瓦宜,第一次執(zhí)行查詢語句時筐喳,Hibernate會把查詢結(jié)果保存在二級緩存中姑原。當再次執(zhí)行查詢語句時悬而,只需從緩存中獲取查詢結(jié)果即可。

查詢緩存適用于以下場合:
  • 經(jīng)常使用查詢語句
  • 很少對查詢語句關(guān)聯(lián)的數(shù)據(jù)庫數(shù)據(jù)進行插入页衙,刪除和更新操作
查詢緩存的配置
  1. 配置二級緩存
  2. 在hibernate中配置
<prop key="hibernate.cache.user_query_cache">true</prop>
  1. 調(diào)用Query, Criteria接口的setCacheable()方法

@Cache

@Cache 定義了二級緩存策略和緩存范圍

@Cache(
    CacheConcurrencyStrategy usage(); //1
    String region() default "";      //2
    String include() default "all";  //3
  1. usage: 當前緩存策略(NONE, READ_ONLY, NONSTRICT_READ_WRITE, TRANSACTIONAL)摊滔。
  • read-only: 只讀緩存

    如果你的應用程序只需讀取一個持久化類的實例,而無需對其修改店乐, 那么就可以對其進行只讀緩存

  • read-write: 讀寫緩存

如果應用程序需要更新數(shù)據(jù)艰躺,那么使用讀/寫緩存比較合適。 如果應用程序要求“序列化事務”的隔離級別(serializable transaction isolation level)眨八,那么就決不能使用這種緩存策略

  • nonstrict-read-write: 不嚴格讀寫緩存

如果應用程序只偶爾需要更新數(shù)據(jù)(也就是說腺兴,兩個事務同時更新同一記錄的情況很不常見),也不需要十分嚴格的事務隔離廉侧,那么比較適合使用非嚴格讀/寫緩存策略页响。

  • transactional :事務性緩存

Hibernate 的事務緩存策略提供了全事務的緩存支持,例如對 JBoss TreeCache 的支持段誊。這樣的緩存只能用于 JTA 環(huán)境中闰蚕,你必須指定為其 hibernate.transaction.manager_lookup_class屬性。

  1. region: 可選參數(shù)连舍,指定二級緩存的去域名没陡,默認為類或者集合的名字.
  2. include: 可選參數(shù)(all, non-lazy)。all包含所有屬性索赏,non-lazy僅包含非延遲加載的屬性

緩存實體

@javax.persistence.Entity
@Table(name = "PROVICE")
@Cache(usage =CacheConcurrencyStrategy.READ_ONLY)
public class Province() {
...
}

緩存集合

@javax.persistence.Entity
@Table(name = "PROVICE")
@Cache(usage =CacheConcurrencyStrategy.READ_ONLY)
public class Province() {//省份對象
    @OneToMany(fetch = FetchType.LAZY)
    @JoinColumn(name = "cityId")
    @Cache(usage = CacheConcrrencyStrategy.READ_ONLY)
    private Set<City> cities; //省份對應城市
}

此時在訪問province.cities時盼玄,Hibernate 只緩存了city的OID,因此在實際查詢過程中還是需要執(zhí)行
select * from city where cityid = ?

為了避免該問題潜腻,可以為City對象同樣配置二級緩存

@javax.persistence.Entity
@Table(name = "CITY")
@Cache(usage =CacheConcurrencyStrategy.READ_ONLY)
public class City() {//城市對象
...
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末埃儿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子融涣,更是在濱河造成了極大的恐慌童番,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件威鹿,死亡現(xiàn)場離奇詭異妓盲,居然都是意外死亡,警方通過查閱死者的電腦和手機专普,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門悯衬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事筋粗〔唛伲” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵娜亿,是天一觀的道長丽已。 經(jīng)常有香客問我,道長买决,這世上最難降的妖魔是什么沛婴? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮督赤,結(jié)果婚禮上嘁灯,老公的妹妹穿的比我還像新娘。我一直安慰自己躲舌,他們只是感情好丑婿,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著没卸,像睡著了一般羹奉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上约计,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天诀拭,我揣著相機與錄音,去河邊找鬼煤蚌。 笑死耕挨,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的铺然。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼酒甸,長吁一口氣:“原來是場噩夢啊……” “哼魄健!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起插勤,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤沽瘦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后农尖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體析恋,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年贬蛙,在試婚紗的時候發(fā)現(xiàn)自己被綠了摩钙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片步氏。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡吨艇,死狀恐怖并村,靈堂內(nèi)的尸體忽然破棺而出巍实,到底是詐尸還是另有隱情,我是刑警寧澤哩牍,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布棚潦,位于F島的核電站,受9級特大地震影響膝昆,放射性物質(zhì)發(fā)生泄漏丸边。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一荚孵、第九天 我趴在偏房一處隱蔽的房頂上張望妹窖。 院中可真熱鬧,春花似錦处窥、人聲如沸嘱吗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谒麦。三九已至,卻和暖如春哆致,著一層夾襖步出監(jiān)牢的瞬間绕德,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工摊阀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留耻蛇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓胞此,卻偏偏與公主長得像臣咖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子漱牵,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Hibernate是一個開放源代碼的對象關(guān)系映射框架夺蛇,它對JDBC進行了非常輕量級的對象封裝,它將POJO與數(shù)據(jù)庫...
    蘭緣小妖閱讀 1,198評論 1 18
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法酣胀,類相關(guān)的語法刁赦,內(nèi)部類的語法,繼承相關(guān)的語法闻镶,異常的語法甚脉,線程的語...
    子非魚_t_閱讀 31,599評論 18 399
  • Hibernate: 一個持久化框架 一個ORM框架 加載:根據(jù)特定的OID,把一個對象從數(shù)據(jù)庫加載到內(nèi)存中OID...
    JHMichael閱讀 1,963評論 0 27
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,805評論 0 11
  • 先安利我最近看的一部電視劇吧:《雞毛飛上天》,講浙江義烏小商品市場怎么發(fā)展起來的故事铆农,以小積大呀牺氨,所以我們的基礎(chǔ)一...
    Iris_mao閱讀 593評論 0 6