Hibernate高級配置

uuid

UUID(Universally Unique Identifier)全局唯一標識符,是指在一臺機器上生成的數(shù)字,它保證對在同一時空中的所有機器都是唯一的。
它是hibernate中生成主鍵比較有效的一種方式

   <generator class="uuid.hex"/>

對象的狀態(tài)

以下是建立在customer和order項目一對多的基礎(chǔ)之上
1)瞬時狀態(tài)
就是創(chuàng)建一個和session無關(guān)的與數(shù)據(jù)庫的數(shù)據(jù)也無關(guān)的對象钦铺,它不能夠長久的保存下來

 //瞬態(tài)對象
    Customer customer1=new Customer(null, "name1", "telephone1");

2)持久狀態(tài)

為什么叫半持久狀態(tài)呢蹦骑?因為session中的數(shù)據(jù)還沒有commit到數(shù)據(jù)庫中

    //半持久化對象
    session.save(customer1);

3)脫管狀態(tài)
數(shù)據(jù)庫中有顧客id為1的用戶民效,但是session中沒有保存customer4的引用就是脫管狀態(tài)禀酱。

1炬守,第一種

 Customer customer4=new Customer(1L, "", "");

2,第二種

   Customer customer5=(Customer) session.get(Customer.class, 2L);
    session.clear();//清空了session中的數(shù)據(jù)
    customer5.setName("11");
    tran.commit();

這里的customer5不能夠更新比勉。因為session不在維護它了劳较。

 session.clear();//清空了session中的數(shù)據(jù)
    customer5.setName("11");
    session.update(customer5);
    tran.commit();

update可以將脫管態(tài)變?yōu)槌志脩B(tài)驹止。

session的緩存

session在事物提交前會使用flush來刷新緩存中的sql語句到數(shù)據(jù)庫

手動設置刷新浩聋,如果沒有寫flush,控制臺會有sql語句臊恋,但是數(shù)據(jù)庫中沒有保存數(shù)據(jù)衣洁。(沒有設置新模式的時候默認自動刷新)

 //1,設置不自動刷新
session.setFlushMode(FlushMode.NEVER);
    session.flush();

只寫session.setFlushMode(FlushMode.NEVER);控制臺就不會出現(xiàn)sql語句抖仅,沒有把session中的數(shù)據(jù)保存到數(shù)據(jù)庫中坊夫。
這兩句都寫了,但是沒有submit就會出現(xiàn)控制臺有sql語句撤卢,但是數(shù)據(jù)庫中沒有數(shù)據(jù)环凿。
ession.setFlushMode(FlushMode.NEVER);
session.flush();

SessionFactory 是重量級的類,它要讀取配置信息放吩,它在會把一些常見的sql語句提前保存起來智听。

 SessionFactory factory=config.buildSessionFactory();

session中維護了一個集合,集合中保存著相關(guān)聯(lián)的半持久化對象的引用如(session.save(custmoer))渡紫。當合適的時機就會把數(shù)據(jù)保存到數(shù)據(jù)庫當中到推。
瞬時對象的數(shù)據(jù)保存到內(nèi)存當中。其實有兩個指針指向內(nèi)存中的對象(即customer中的數(shù)據(jù))惕澎,一個是棧區(qū)中它本身的引用(Customer和Session)莉测。

擴展中存放的是一些基本類型的變量和對象的引用變量,中存放的是new創(chuàng)建的對象和數(shù)組(垃圾回收機制回收堆的數(shù)據(jù))唧喉,方法區(qū)放的是一些方法和靜態(tài)屬性和方法捣卤。
[Stack棧和Heap堆的區(qū)別]

session中維護持久態(tài)對象忍抽,好處是它可以監(jiān)聽到對象的變化。監(jiān)聽到后立刻產(chǎn)生一條sql語句董朝。目的是保證數(shù)據(jù)庫和用戶更新的數(shù)據(jù)是一致的梯找。
比如:結(jié)果就是沒調(diào)用update自動就更新了

  Customer customer=(Customer) session.load(Customer.class, 1L);
    customer.setName("one");

常用的方法

1)save(obj)
obj 瞬態(tài)!用第一種
將瞬態(tài)轉(zhuǎn)化為持久態(tài)對象
obj 脫管 不推薦
重新保存一個新的對象
obj 持久態(tài)
沒意義
2)update(obj)
obj 脫管
將脫管態(tài)轉(zhuǎn)換為持久態(tài)
3)saveOrUpdate(obj)
如果obj是瞬態(tài)對象,保持save
如果obj是脫管對象,更新update
4)load(Customer.class, 2L)在你需要輸出的時候才去數(shù)據(jù)庫查益涧,如果沒有輸出就不查詢也不報錯
5)get(Customer.class, 2L)先去數(shù)據(jù)庫查然后沒有結(jié)果就返回null锈锤。


Paste_Image.png

1)lazy
true 延遲加載,查詢當前對象的時候暫時先不查詢與之關(guān)聯(lián)的對象
false 立即加載闲询,查詢當前對象的時候查詢所有與之關(guān)聯(lián)的對象久免。
**2)inverse **
一般寫在set中
默認false 當前方可以維護關(guān)系(產(chǎn)生外鍵)
true 當前方不維護關(guān)系(不產(chǎn)生外鍵)
下面的cascade主從方維護關(guān)系會產(chǎn)生影響
3)cascade
一般寫在set中
級聯(lián)操作

  save-update
            customer
            <set name="orders" cascade="save-update">       
            </set>

保存數(shù)據(jù)

   Session session=HibernateSessionFactory.getSession();
    Transaction tran=session.beginTransaction();
    Customer customer=new Customer(null, "terry", "12324212");
    Order o1=new Order(null,"100.0",new Date());
    Order o2=new Order(null,"120.0",new Date());

customer級聯(lián)order(主方維護從方)
order會比下面的多一個更新外鍵的操作

    customer.getOrders().add(o1);
    customer.getOrders().add(o2);
    session.save(customer);
    session.save(o1);
    session.save(o2);

order維護customer(從方維護主方)

   o1.setCustomer(customer);
    o2.setCustomer(customer);
    session.save(customer);
    session.save(o1);
    session.save(o2);

刪除
delete
刪除保存更新
all
解除關(guān)系即刪除
delete-orphan
刪除保存更新,解除關(guān)系即刪除
all-delete-orphan

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扭弧,隨后出現(xiàn)的幾起案子阎姥,更是在濱河造成了極大的恐慌,老刑警劉巖鸽捻,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呼巴,死亡現(xiàn)場離奇詭異,居然都是意外死亡御蒲,警方通過查閱死者的電腦和手機衣赶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厚满,“玉大人府瞄,你說我怎么就攤上這事〉夤浚” “怎么了遵馆?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丰榴。 經(jīng)常有香客問我货邓,道長,這世上最難降的妖魔是什么四濒? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任换况,我火速辦了婚禮,結(jié)果婚禮上峻黍,老公的妹妹穿的比我還像新娘复隆。我一直安慰自己,他們只是感情好姆涩,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布挽拂。 她就那樣靜靜地躺著,像睡著了一般骨饿。 火紅的嫁衣襯著肌膚如雪亏栈。 梳的紋絲不亂的頭發(fā)上台腥,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音绒北,去河邊找鬼黎侈。 笑死,一個胖子當著我的面吹牛闷游,可吹牛的內(nèi)容都是我干的峻汉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼脐往,長吁一口氣:“原來是場噩夢啊……” “哼休吠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起业簿,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤瘤礁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后梅尤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柜思,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年巷燥,在試婚紗的時候發(fā)現(xiàn)自己被綠了赡盘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡矾湃,死狀恐怖亡脑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邀跃,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布蛙紫,位于F島的核電站拍屑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坑傅。R本人自食惡果不足惜僵驰,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唁毒。 院中可真熱鬧蒜茴,春花似錦、人聲如沸浆西。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽近零。三九已至诺核,卻和暖如春抄肖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窖杀。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工漓摩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人入客。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓管毙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親桌硫。 傳聞我的和親對象是個殘疾皇子锅风,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法鞍泉,內(nèi)部類的語法皱埠,繼承相關(guān)的語法,異常的語法咖驮,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • 目錄 1. Hibernate的持久化類狀態(tài) 1.1 三種持久化對象的狀態(tài) 1.2 區(qū)分三種持久化對象的狀態(tài) 1....
    深海魚Q閱讀 461評論 0 3
  • hibernate(20170731) 1.導包:hibernate-distribution-3.5.6-Fin...
    瀟湘雨smile閱讀 541評論 0 0
  • 本文約定: 1. Nhibernate簡寫為NHB; 2. 本文例子的開發(fā)平臺為win2000pro+sp4, s...
    壹米玖坤閱讀 533評論 0 0
  • 等待的都在边器,只是消磨的時間總是讓失望層層疊加。難熬的不是時間而是看著希望像泡影在眼前一個個破碎托修。 走了一段很費力的...
    100a20b64abf閱讀 159評論 0 0