posts - 176, comments - 240, trackbacks - 0, articles - 7

          Hibernate動態(tài)化

          Posted on 2006-07-23 21:13 canonical 閱讀(5087) 評論(8)  編輯  收藏 所屬分類: 軟件開發(fā)
          ? hibernate的應(yīng)用中一般總是將entity映射為強類型的java類,這為程序操縱帶來很多便利,同時可以將大量動態(tài)過程隱蔽在對象包絡(luò)之下。映射為java類的一個主要問題在于無法在程序運行時刻對于程序進行修改,而數(shù)據(jù)結(jié)構(gòu)的局部修改幾乎是無法避免的。hibernate3本身支持動態(tài)數(shù)據(jù)模型,它允許我們把entity映射為Map數(shù)據(jù)類型, 當數(shù)據(jù)結(jié)構(gòu)發(fā)生變化的時候, 只需要修改hbm文件即可改變映射模型,而不需要修改java實體類代碼.?
          ? ? 在hbm定義文件中,如果我們不指定name屬性,而是指定entity-name屬性,則我們可以將entity映射為Map, 而不是一個java實體類.
          ? <class
          ??? entity-name="test.DynamicEntity"
          ??? table="DYNAMIC_ENTITY"
          ? >...</class>
          ? 此外, 也可以選擇將部分字段動態(tài)映射到Map
          ? <class ...>
          ??? <dynamic-component name="dynamicAttributes">
          ????? <property name="foo" column="FOO"/>
          ????? <property name="bar" column="BAR"/>
          ??? </dynamic-component>
          ? </class>
          在HQL語句中可以直接使用o.dynamicAttributes.foo來訪問foo屬性,所有操作與普通屬性相同。
          ? 為了實現(xiàn)hiberante映射模型的動態(tài)更新,我們首先需要實現(xiàn)sessionFactory的動態(tài)更新。目前hibernate的實現(xiàn)只允許從hbm文件重建sessionFactory, 即新建一個sessionFactory替換原有的sessionFactory, 在使用spring的情況下,這需要對org.springframework.orm.hibernate3.LocalSessionFactoryBean進行小小的hack。
          ? 為了將動態(tài)屬性和普通屬性同樣對待,要求在操作實體對象屬性的時候需要能夠自動處理nested property, 即需要如下類似的方法:entityDao.getProperty(entity,"dynamicAttributes.foo"), entityDao.setProperty(entity,"dynamicAttributes.foo", attrValue).
          ? 為了使得應(yīng)用程序自動處理新增屬性,要求程序是meta驅(qū)動的:當實體對象增加了一個屬性時,只需要修改meta文件,即可完成對于該屬性的增刪改查匯總等普通應(yīng)用需求。

          Feedback

          # re: Hibernate動態(tài)化  回復(fù)  更多評論   

          2006-09-16 22:24 by 曹曉鋼
          嘿嘿,和我想的事情素一模一樣的亞!

          # re: Hibernate動態(tài)化  回復(fù)  更多評論   

          2006-09-18 00:30 by canonical
          嗯,我們對hiberante作了一些擴展,包括支持公式字段,附件上傳字段等

          # re: Hibernate動態(tài)化  回復(fù)  更多評論   

          2006-10-11 15:05 by jiaoly
          有個問題:使用 Map,能夠?qū)崿F(xiàn) lazy load 嗎

          # re: Hibernate動態(tài)化  回復(fù)  更多評論   

          2007-11-09 15:17 by aiai
          能再詳細點該有多好啊 唉~

          # re: Hibernate動態(tài)化  回復(fù)  更多評論   

          2008-03-17 20:17 by yeti20011
          <hibernate-mapping>
          <class name="hib.TtItem" table="TT_ITEM" schema="SCOTT">
          <id name="id" type="java.lang.Long">
          <column name="ID" precision="22" />
          <generator class="increment" />
          </id>
          <property name="name" type="java.lang.String">
          <column name="NAME" length="80" />
          </property>
          <joined-subclass entity-name="Ttbook">
          <key column="aid" />
          <property name="ttt" type="java.lang.String"></property>
          </joined-subclass>
          </class>
          </hibernate-mapping>
          有沒有試驗過這樣的配置文件

          # re: Hibernate動態(tài)化  回復(fù)  更多評論   

          2008-03-17 20:17 by yeti20011
          我的email:yeti20022@hotmail.com

          # re: Hibernate動態(tài)化  回復(fù)  更多評論   

          2010-08-02 16:11 by 技術(shù)學(xué)習(xí)
          能詳細點嗎,能舉個列子在spring+hibernate 中動態(tài)化具體實現(xiàn)過程

          # re: Hibernate動態(tài)化[未登錄]  回復(fù)  更多評論   

          2010-08-19 14:45 by Java
          能舉個例子在spring+hibernate中動態(tài)化的列子嗎?
          主站蜘蛛池模板: 长丰县| 苍山县| 平顶山市| 湘阴县| 乌审旗| 江西省| 赤城县| 静乐县| 凤翔县| 临夏市| 江安县| 新田县| 舞钢市| 遵化市| 普格县| 临武县| 门源| 文登市| 锡林郭勒盟| 大同县| 盐池县| 呼伦贝尔市| 札达县| 秦皇岛市| 元谋县| 大安市| 玉林市| 盖州市| 饶河县| 电白县| 垫江县| 深水埗区| 五华县| 织金县| 时尚| 弥勒县| 宜兰县| 江孜县| 新丰县| 上犹县| 仙游县|