簡單講解Hibernate數據
在向大家詳細介紹Hibernate數據之前,首先讓大家了解下Hibernate為企業應用開發者操作關系數據庫的提供了清晰明了而又強大的工具,然后全面介紹Hibernate數據。
Hibernate數據
目前人們很容易發現Hibernate正迅速的成為流行的J2EE的O/R映射工具和數據集成框架(如果不是***的)。Hibernate為企業應用開發者操作關系數據庫的提供了清晰明了而又強大的工具。然而如果你需要在外部訪問那些包裝在J2EE web應用里的實體,情況又怎樣呢?你的開發跟應用獨立分開,卻又相同的實體以訪問你的數據嗎?又或者你得編寫附加的web組件來管理對數據的內部訪問嗎?
在很多情況下,這些問題都會出現。我的情況是我的公司需要將來自多個供應商,有著多種文件格式的記錄導入到數據庫里。我想起我以前經常使用的方法,那就是編寫Shell和SQL教本(甚至是存儲過程)來導入數據。但是由于我們的數據模型太過復雜,我決定在web應用之外盡可能的利用現有的實體,Spring DAO以及服務并且開發一個自定義的J2SE命令行數據加載工具。
現在很多Hibernate的文檔和范例都是綁定在容器上。不管是web應用還是內部的大型應用,總會使用到容器的。人們有很好的理由去使用它。容器是設計來提供對各種特性的支持,例如事務處理,線程以及安全?,F今,這些特性都是開發中等規模和企業應用所必需的工具。然而當你需要在容器之外訪問實體時,你該怎樣呢?你是使用現有的架構和代碼呢,還是會從一個不同的角度來解決問題,比如說完全采用另一種開發語言?當然,我們沒有正確答案。在本文的余下部分,我將說明我的方法:就是在Spring容器之外重用現有的實體/POJO.
起初,腳本語言,例如Perl,Python,Ruby甚至Tcl(是的,我以前也做過這個)看起來有很多優勢。它們能省下很多時間,可以輕易得到初始結果,還能規避許多Hibernate潛在的復雜度。人們完全可能只用幾行代碼就可以連接數據庫,查詢結果,已經打印輸出到終端屏幕或者日志文件。然而,取決于你的數據模型,事情也(總是)會變得相當復雜。譬如說你有一個表 person, 其中有一個外鍵屬于表 address.當我們添加數據的時候,表address沒有正確的插入數據,就會導致表person 也不能插入了。這是個很典型的事務處理方面的問題。也許有人會說在腳本語言中這個問題不難解決,就像在你的主程序里一樣??墒菃栴}仍然存在,為什么要這樣做呢?業務邏輯不是已經在你的應用里面了嗎?為什么要在寫一遍代碼呢?而且這并不是唯一的情況,你必須重復你的工作和業務邏輯,這樣就會帶來出錯的可能。
然而,有些人會覺得這樣也行,他們使用自己覺得最適合的工具。也許你已經因為程序之外的原因而有了某種獨立的架構;也許你會在獨立的數據庫里加載和測試數據,然后在通過各種測試后再遷移到產品的數據庫里;又也許你把數據庫維護外包出去,你只需要把相關文件發給合作伙伴讓他們去處理那些問題。總之,總會有很多理由不使用現有的Hibernate數據層。沒有誰對誰錯,只是如果你可以也愿意在你的應用之外使用現有的代碼,請往下看。我會告訴你一些方法,這能解決你不少的煩惱噢。
【編輯推薦】