Flyingis

          Talking and thinking freely !
          Flying in the world of GIS !
          隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
          數據加載中……

          Hibernate的靈活與方便

              作者:Flyingis

              許多軟件設計的思維都源于生活的方方面面,可能存在某些設計思想并非受平時生活所啟迪,但它們面臨的情況卻如此相象。軟件設計原本就是生活的一部分,軟件設計的“靈活”與“方便”(或“簡便”)即是世界萬物的一個共同點。

              Hibernate作為流行的企業應用和關系數據庫之間的持久化中間件,受到越來越多的關注。雖然使用Hibernate可以使得項目易于維護,幫助開發人員更好地處理復雜關系模型,提供了很強的方便性,但卻失去了JDBC原有的靈活性。如何在“靈活”與“方便”之間取舍、平衡顯得重要起來。

              不久前江南白衣的一篇文章ORM透明持久化方案面對的共同困境道出了現在ORM不盡如人意的地方,除了網上,還有書本的前言等對Hibernate的眾多贊美之詞外,現在討論它呆板、配置繁瑣的聲音也逐漸多了起來,最熱鬧的就是前段時間Ruby on Rails引起J2EE陣營的騷動。個人對Java研究尚淺,對Hibernate有一些使用心得,下面所列出的不一定是Hibernate本身的缺陷,不足之處希望大家拍磚指出。

          1.  提取表單中字典Value的不便。
              字典一般由ID和NAME兩個字段組成,其ID號存儲于數據庫其他表中,當查詢這些表信息時,Hibernate以List或Set形式返回的結果,沒有辦法將ID號顯示為對應的NAME。在JDBC中,可以直接通過Map來存儲字典,通過map.getValue()來返回字典的值。

          2.  Hibernate內置映射類型復雜化
              在開發過程中,時常會查找Hibernate映射類型--Java類型--標準SQL類型之間的關系。繁雜之處體現在兩方面,一是各種數據庫的數據類型和標準SQL之間會有一定的出入,二是Hibernate映射類型雖然大部分和Java類型相同,但也存在比較晦澀的地方,例如character類型對應Java的char / java.lang.Character / java.lang.String,text對應著Java的java.lang.String。

          3.  ID規定化生成
              Hibernate中內置標識符生成器給表單ID自動生成提供了方便,但卻不能自定義各種ID形式。開發過程中,有時需要特定的ID號來區分各種字典,例如字典1的ID號為1A,2A……,字典2的ID號為1B,2B……,當這些ID號存儲在表單中時,可以方便開發人員在數據庫中查找各表單存儲各類字典數據的情況,方便調試,但使用Hibernate生成器就失去了這種靈活性。

              Hibernate的不足網上已有很多討論,以上只是個人增加的幾點體會。即使這樣,Hibernate仍是一款優秀的持久層插件,只是“靈活”的背后隱藏著“復雜”,“方便”的背后隱藏著“不便”,如何取舍與平衡,還是看實際需要吧。

          posted on 2006-01-14 10:22 Flyingis 閱讀(2736) 評論(5)  編輯  收藏 所屬分類: Hibernate

          評論

          # re: Hibernate的靈活與方便  回復  更多評論   

          Hibernate不能自定義生成UUID??接觸不太多,但印象中好像可以通過繼承來創建自己UUID生成的類吧?
          2006-01-14 10:55 | 漢尼

          # re: Hibernate的靈活與方便  回復  更多評論   

          uuid.hex用一個128-bit的UUID算法生成字符串類型的標識符。在一個網絡中唯一(使用了IP地址)。UUID被編碼為一個32位16進制數字的字符串,它包含:IP地址,JVM的啟動時間(精確到1/4秒),系統時間和一個計數器值(在JVM中唯一)。要完全自定義的ID好像沒有看到比較直接的方法。
          2006-01-14 11:02 | Flyingis

          # re: Hibernate的靈活與方便  回復  更多評論   


          1.可以使用formula來操作: <property name="name" formula="( select s.name from yourtable s where s.id = id )" type="java.lang.String">

          3.可以自己寫id生成器。




          2006-01-16 11:00 | lizongbo

          # re: Hibernate的靈活與方便  回復  更多評論   

          理解偏差吧, ID本來就不應該帶業務規則,這是數據庫設計的基本啊.

          2006-01-16 11:12 | nickey

          # re: Hibernate的靈活與方便  回復  更多評論   

          @ lizongbo
          感謝你對第一點提供的思路。
          id生成器我就是自己寫的來滿足項目這種需要。具體見
          http://www.aygfsteel.com/flyingis/archive/2005/11/06/18471.html

          ◎ nickey
          數據庫設計我不熟,但ID寫成1A,2A等等對設計有什么不好的影響嗎?
          2006-01-16 21:07 | Flyingis
          主站蜘蛛池模板: 高安市| 迁西县| 北海市| 新乐市| 仁化县| 唐海县| 揭东县| 同江市| 永城市| 雷山县| 博湖县| 呼图壁县| 鄂尔多斯市| 镇雄县| 观塘区| 安康市| 资阳市| 永宁县| 西昌市| 上蔡县| 阜南县| 石景山区| 武威市| 乐山市| 花垣县| 丹阳市| 泽库县| 江北区| 台南县| 湖南省| 浙江省| 新宁县| 蒙自县| 邢台市| 济阳县| 佛坪县| 涿州市| 保定市| 平顺县| 海兴县| 高平市|