當前位置:編程學習大全網 - 源碼下載 - 文章翻譯Object Generation: A Better Approach to Hibernate Integration

文章翻譯Object Generation: A Better Approach to Hibernate Integration

Hibernate的毅力:經典做法

Hibernate的設計很容易讓頑固的,幾乎任何普通Java對象(的POJO ) 。創造壹個持久化對象很簡單,經典的做法,即冬眠社會的建議可以歸納為兩個步驟:

選擇壹個業務重點和實施hashcode和平等的方式對物體。企業關鍵是壹些組合的,壹成不變的業務領域,這不僅是獨壹無二的,但保證不會改變的整個使用壽命的目的。它被用來識別物體和考驗平等。

寫的Hibernate映射描述。該廣義映射領域對象的欄目和表在數據庫中。壹個描述詞,可采取各種形式,但它的普遍提供了壹個XML文件。

表1 , 2及3個簡單的例子說明這個過程:

上市1是Java代碼,為壹個簡單的用戶是工人階級中的被啟用毅力。在這個例子中,用戶的電子郵件地址已選定為對象的業務重點。公告如何用它在執行該hashcode和平等的方法。

上市二是相應的Hibernate的描述。簡單來說地圖領域,在該對象直接向欄目在數據庫中。

上市3是模式為底層數據庫表。公告說,它的身分,而不是電子郵件地址,服務作為首要關鍵。這是被稱為代孕的關鍵,壹個***同的最佳實踐數據庫的設計。

經典的做法行得通,但它有壹些顯著的缺點。出於以下原因,第壹個步驟(選擇壹個業務重點和實施hashcode和平等的方法)導致的麻煩,許多Java開發者:

許多,即使不是大多數, Java對象沒有便捷的業務鍵。這是明確的,即使在樣本用戶階層。電子郵件地址是用來作為業務重點,但它不是壹個好的適合,因為用戶應能輕易改變它。事實上,它的***同有物體那裏幾乎所有的領域是可以改變的。這往往需要變通方法,使這些物體適合的模式。妳會看到這些變通方法無論是在物體本身,並在代碼中用來管理它們。

貫徹hashcode和平等的方法,在整個項目的持久對象是繁瑣和容易出錯的。這只是更不相幹的代碼,妳必須寫,測試和維護。

業務鑰匙往往是組成壹個組合的弦樂團。請記住, hashcode和平等的方法是經常被使用在幕後,雖然性能未必是壹個問題,可如果這些字符串長相似。此外,您可能壹直都在尋找易於優化。

幸運的是,這些問題是可以解決的壹個新的辦法,以冬眠壹體化。

Hibernate的毅力:壹代辦法

物體的壹代,是壹種不同的方法來冬眠壹體化。而非商務的鑰匙,對象是確定的,由他們代孕的關鍵,而不需要提供定制hashcode和平等的方法,為每個對象。這個概念雖然簡單,但是實施需要有壹點理解和基礎設施。

代理孕母關鍵是壹個獨特的識別標誌,為每排在壹個特定表。如果妳看過以前的物品,妳就會看到它作為身份證柱對用戶表連同其同伴序列用來產生價值。這意味著每個用戶對象的,堅持將擁有自己獨特的整數標識符。

代理孕母關鍵看起來是壹個自然選擇的壹個對象標識的,它不過是壹個小問題:它通常不會得到它的價值,直到物體是堅持到數據庫。這意味著壹個對象的補充,以收集之前,它的持續存在將故障(收藏致電hashcode和平等的方法,在幕後) 。

解決的辦法是使用壹個對象發電機,修改的數據訪問對象(道) ,可檢索並指派標識符在創建對象。把它作為壹個對象工廠設計冬眠。每個對象返回,從發電機有壹個數據庫,生成識別的保證是穩定的和獨特性。兩者之間關鍵的區別,這個問題和典型的做法是,這壹切發生之前,目的在於堅持。

使這壹神奇的事情,無縫地集成Hibernate的要求有點基礎設施。以下每項要素,是比較簡單的,但是它們都需要妥善策劃的:

壹個抽象的實體基類。這個類包含了實現的hashcode和平等的方法用於所有持久化對象。嚴格來說,這門課是沒有必要的,但是這並不排除不相幹的代碼。

改良道。這是物體發生器,可檢索並指派標識符後,創建對象。這個類使用了javassist圖書館中提到的要求,這篇文章。如果您從未使用javassist ,這是壹個優秀的開放源碼庫,為創造或加強班,在運行時。

壹個簡單的生成實體界面。這是壹個界面,所有產生的實體執行在運行時(通過javassist圖書館) 。它可作為壹種標記接口與幾個簡單的方法來跟蹤壹個對象的持久性地位。

壹個定制標識符發生器。這是壹個實施壹個冬眠identifiergenerator了解對象的生成和代表們的壹個基本的識別標誌發生器。這是比較容易表現出比它就是要解釋。

壹個定制Hibernate的攔截器。攔截器優化性能,利用所產生的實體界面,以盡量減少數據庫的來電。

幸運的是,妳會看到這壹切都不復雜,妳在最後Business Objects公司,而這壹點。任務加上毅力,減人伸出基地班,並創造壹個最起碼的同伴道。對於基本用戶級的發現,在過去的上市,其代碼是減少到略多於必要的業務邏輯:

市民階層用戶延伸abstractgenericentity <long, user>

私人弦樂電子郵件;

私人字符串密碼;

公***弦getemail ( ) (返回的電子郵件; )

公***無效setemail (弦樂五) (電子郵件= E類; )

公***弦getpassword ( ) (返回密碼; )

公***無效setpassword (弦樂規劃) (密碼=磷; )

@淩駕

最後市民階級<user> getentityclass ( ) (返回user.class ; )

妳會發現這門課,不包括hashcode或等於方法。也不包括身份證財產。他們都是包含在abstractgenericentity階級隨著宣言的getentityclass方法。

  • 上一篇:怎樣在c++ 中刪除vector最後壹個元素
  • 下一篇:陳小春現身網紅直播間,刷近100萬禮物,淪落到蹭網紅熱度了嗎?
  • copyright 2024編程學習大全網