自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳細(xì)描述Hibernate3實(shí)踐

開發(fā) 后端
這里介紹Hibernate3實(shí)踐,Hibernate不是盞省油的燈,也不是想像的射來(lái)射去很簡(jiǎn)單的事,有很多細(xì)節(jié)處理不好會(huì)讓你很不舒服的。

在向大家詳細(xì)介紹Hibernate3實(shí)踐之前,首先讓大家了解下Session的save()、persist()、update()、saveOrUpdate()、merge()、delete()方法。

Hibernate3實(shí)踐

Hibernate不是盞省油的燈,也不是想像的射來(lái)射去很簡(jiǎn)單的事。有很多細(xì)節(jié)處理不好會(huì)讓你很不舒服的,這方面最突出的表現(xiàn)在兩方面:一是事務(wù)管理,是JTA事務(wù)還是 JDBC事務(wù)?幸虧有了Spring和J2EE容器;二是胡亂映射,模型關(guān)系建立不合理或者錯(cuò)誤導(dǎo)致,或者是映射策略和技術(shù)不過(guò)關(guān)導(dǎo)致。這樣的最終結(jié)果是拋出一堆HibernateException,摸不著頭腦。下面是我實(shí)踐中的一些總結(jié)作為備忘錄寫出來(lái)。

參考的是***的Hibernate 3.2.6GA API文檔,還吸收了Hibernate牛人(夏新)寫的書和翻譯中文開發(fā)手冊(cè)的精華。

1、Configuration/SessionFactory/Session

Configuration實(shí)例代表了一個(gè)應(yīng)用程序中Java類型 到SQL數(shù)據(jù)庫(kù)映射的完整集合. Configuration被用來(lái)構(gòu)建一個(gè)(不可變的 (immutable))SessionFactory.
◆SessionFactory是線程安全的,創(chuàng)建代價(jià)很高。
◆Session是非線程安全的,輕量級(jí)的。一個(gè)Session對(duì)應(yīng)一個(gè)JDBC連接,
◆Session的connection()會(huì)獲取Session與之對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接Connection對(duì)象。
◆Session的功能就是操作對(duì)象的,這些對(duì)象和數(shù)據(jù)庫(kù)表有映射關(guān)系。
◆Session操作的對(duì)象是有狀態(tài)的,分三類:
1)自由狀態(tài)(transient): 未持久化,未與任何Session相關(guān)聯(lián),數(shù)據(jù)庫(kù)表中沒有對(duì)應(yīng)的記錄。
2)持久化狀態(tài)(persistent): 與一個(gè)Session相關(guān)聯(lián),對(duì)應(yīng)數(shù)據(jù)庫(kù)表中一條記錄。
3)游離狀態(tài)(detached): 已經(jīng)進(jìn)行過(guò)持久化,但當(dāng)前未與任何Session相關(guān)聯(lián),數(shù)據(jù)庫(kù)表中曾經(jīng)有一條記錄,現(xiàn)在還有沒有就不知道了。

游離狀態(tài)的實(shí)例可以通過(guò)調(diào)用save()、persist()或者saveOrUpdate()方法進(jìn)行持久化。持久化實(shí)例可以通過(guò)調(diào)用 delete()變成游離狀態(tài)。通過(guò)get()或load()方法得到的實(shí)例都是持久化狀態(tài)的。游離狀態(tài)的實(shí)例可以通過(guò)調(diào)用 update()、0saveOrUpdate()、lock()或者replicate()進(jìn)行持久化。游離或者自由狀態(tài)下的實(shí)例可以通過(guò)調(diào)用 merge()方法成為一個(gè)新的持久化實(shí)例。

2、Session的save()/persist()/update()/saveOrUpdate()/merge()/delete()方法

◆save()方法將指定對(duì)象保存,插入表中一條數(shù)據(jù);
◆persist()方法將指定對(duì)象保存,插入表中一條數(shù)據(jù),我還沒發(fā)現(xiàn)它和save方法有什么特別之處。
◆replicate()方法完全使用給定對(duì)象各個(gè)屬性的值(包括標(biāo)識(shí)id)來(lái)持久化給定的游離狀態(tài)(Transient)的實(shí)體,很暴力啊,其中還需要指定存儲(chǔ)模式(有四種保存策略供選擇)。
◆update()方法將指定對(duì)象更新,更新表中一條數(shù)據(jù);
◆saveOrUpdate()方法接收一個(gè)實(shí)體對(duì)象,根據(jù)實(shí)體對(duì)象的id判斷是否已經(jīng)存在進(jìn)行保存或更新操作,這樣保存和更新方法就統(tǒng)一了;
◆merge()方法將給定的對(duì)象的狀態(tài)復(fù)制到具有相同標(biāo)識(shí)的持久化對(duì)象上。
◆delete()方法將指定對(duì)象刪除,刪除表中一條數(shù)據(jù);

特別注意:為了使用saveOrUpdate()方法,在由定義映射文件時(shí),通過(guò)設(shè)定<id>標(biāo)簽的unsaved- value="null"來(lái)判斷執(zhí)行什么操作:當(dāng)id屬性等于unsaved-value的值(在此為null)時(shí),則認(rèn)為還沒有保存,應(yīng)該執(zhí)行保存操作,否則執(zhí)行更新操作。這樣設(shè)定之后,可以使用 saveOrUpdate()方法來(lái)統(tǒng)一保存和更新的方法。以上是Hibernate3實(shí)踐

【編輯推薦】

  1. Hibernate類庫(kù)簡(jiǎn)單描述
  2. 淺析Hibernate延遲加載
  3. Spring Hibernate簡(jiǎn)單討論
  4. 介紹Hibernate版本的更新
  5. 簡(jiǎn)單講述Hibernate實(shí)例
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2009-09-24 16:19:53

Hibernate應(yīng)用

2009-09-25 14:28:40

Hibernate S

2009-09-14 13:14:49

LINQ序列

2009-09-14 14:58:52

LINQ to XML

2009-09-14 16:33:55

LINQ To XML

2009-11-18 11:14:49

2010-02-05 16:58:18

Android服務(wù)

2009-06-17 09:17:41

Hibernate3

2009-09-08 11:09:39

LINQ數(shù)據(jù)源

2009-08-10 16:40:03

C#索引器

2010-04-09 17:45:06

Oracle索引

2009-10-15 14:59:45

網(wǎng)絡(luò)布線光纖技術(shù)

2009-08-26 15:53:48

C#擴(kuò)展方法

2009-08-27 15:17:40

C# const變量

2009-09-07 15:15:43

2009-10-10 10:04:50

RHEL合法使用

2009-09-24 10:22:38

Hibernate3新

2010-09-08 15:10:48

2009-10-16 11:02:40

VB調(diào)用動(dòng)態(tài)連接庫(kù)

2009-09-03 17:59:18

C#調(diào)用事件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)