新聞中心
本文向大家介紹Hibernate映像文件實例,可能好多人還不了解Hibernate映像文件,沒有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。

為尋烏等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及尋烏網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站建設(shè)、尋烏網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
Hibernate映像文件實例
們已經(jīng)從改用這樣的純凈的對象id中獲取了不少好處。我們對equals()和hashCode()方法的實現(xiàn)更加簡單而且容易閱讀。這些方法再也不易出錯而且無論在保存對象之前還是之后,它們都能和Collection一起正常工作。Hibernate也能夠變的更快一些,這是因為在保存新的對象之前它再也不需要從數(shù)據(jù)庫讀取一個序列值。此外,新定義的equals()和hashCode()對于一個包含 id對象的對象來說是具有通用性的。這意味著我們可以把這些方法移動到一個抽象的父類當(dāng)中去。我們不再需要為每一個域?qū)ο笾匦聦崿F(xiàn)equals()和 hashCode(),而且我們也不再需要考慮對于一個類來說哪些字段的組合是***且不變的。我們只要簡單地繼承這個抽象類。當(dāng)然,我們沒必要強(qiáng)迫我們的域?qū)ο罄^承一個父類,所以我們定義了一個接口來保證設(shè)計的靈活性。
- public interface PersistentObject {
- public String getId();
- public void setId(String id);
- public Integer getVersion();
- public void setVersion(Integer version);
- }
- public abstract class AbstractPersistentObject implements PersistentObject {
- private String id = IdGenerator.createId();
- private Integer version;
- public String getId() { return id;
- }
- public void setId(String id) { this.id = id; }
- public Integer getVersion() { return version; }
- public void setVersion(Integer version) { this.version = version; }
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || !(o instanceof PersistentObject)) { return false; }
- PersistentObject other = (PersistentObject)o;
- // if the id is missing,
- return false
- if (id == null) return false;
- // equivalence by id
- return id.equals(other.getId());
- }
- public int hashCode() {
- if (id != null) {
- return id.hashCode();
- } else {
- return super.hashCode();
- }
- }
- public String toString() {
- return this.getClass().getName() + "[id=" + id + "]";
- }
- }
現(xiàn)在我們有了一個簡單而高效的方法來創(chuàng)建域?qū)ο蟆K鼈兝^承了AbstractPersistentObject,這個父類能在它們***次被創(chuàng)建時自動賦予它們一個id并且恰當(dāng)?shù)膶崿F(xiàn)了equals()和hashCode()這兩個方法。域?qū)ο笠驳玫搅艘粋€對toString()方法的合理的缺省實現(xiàn),這個方法可以有選擇地被重寫。如果這是一個查詢例子的測試對象或者例子對象,id值時可以被改變或者被設(shè)為null。否則它是不應(yīng)當(dāng)被改變的。如果因為某些原因我們需要創(chuàng)建一個繼承自其它類的域?qū)ο?,這個對象就應(yīng)當(dāng)實現(xiàn)PersistentObject接口而不是繼承抽象類。
- public class Person extends AbstractPersistentObject {
- // Person-specific fields and behavior here
- }
從上一個例子開始Hibernate映像文件就不會再改變了。我們不想麻煩Hibernate去了解抽象父類,相對的,我們只要保證每個持久化對象的映射文件包含一個id項(和一個被指派的生成器)和一個帶有unsaved- value="null"屬性的version標(biāo)簽。機(jī)敏的讀者可能已經(jīng)注意到,每當(dāng)一個持久化對象被實例化的時候,它的id值得到了指派。這意味著當(dāng)Hibernate在內(nèi)存中創(chuàng)建一個已經(jīng)保存過的對象時,雖然這個對象是已經(jīng)存在并從數(shù)據(jù)庫中讀取的,它也會得到一個新的id。這不會產(chǎn)生問題,因為Hibernate會接著調(diào)用對象的setId()方法,用保存的真實id來替換新分配的id。剩下的id生成器并不是問題,因為實現(xiàn)它的算法是輕量級的(也就是說,它并不牽扯到數(shù)據(jù)庫)。
到現(xiàn)在為止一切都很好,但是我們遺漏了一個重要的細(xì)節(jié):如何實現(xiàn)IdGenerator.createId().我們可以為我們理想中的鍵值生成器(key-generation)算法定義一些標(biāo)準(zhǔn)。
◆鍵值可以不牽扯到數(shù)據(jù)庫而很輕量級的產(chǎn)生
◆即使跨越不同的虛擬機(jī)和不同機(jī)器,鍵值也要保證***性。
◆如果可能鍵值可以由其它程序,編程語言和數(shù)據(jù)庫生成,至少要能和它們兼容
【編輯推薦】
- Hibernate Util簡單討論
- 詳解優(yōu)化Hibernate性能經(jīng)驗
- 概述Hibernate dbcp連接池使用方法
- 淺析Hibernate.cfg.xml配置
- Hibernate Shard基礎(chǔ)分析
網(wǎng)站名稱:分析Hibernate映像文件
地址分享:http://m.5511xx.com/article/cdgphgs.html


咨詢
建站咨詢
