Oracle神諭

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            284 隨筆 :: 9 文章 :: 106 評(píng)論 :: 0 Trackbacks
            看到j(luò)BPM中大量使用了subclass的用法,應(yīng)該說(shuō)這個(gè)是比較OO的,設(shè)計(jì)的非常合理。
            (一)、首先先去看看Hibernate的subclass:
            1.對(duì)于“每一個(gè)類(lèi)繼承樹(shù)對(duì)應(yīng)一個(gè)表”的策略來(lái)說(shuō),就需要使用<subclass>定義。
            <subclass>
                      name="className"  //子類(lèi)的全名
                      discriminator-value="discriminator-value" //辨別標(biāo)識(shí),一個(gè)用于區(qū)分每個(gè)獨(dú)立的子類(lèi)的值
                      proxy="proxyInterface" //指定一個(gè)類(lèi)或接口,在延遲加載時(shí)作為代理使用
                      lazy="true|false"
                      dynamic-update="true|false"
                      dynamic-insert="true|false"
                      entity-name="entityName"
                      node="element-name">
                     <property ..../>
                    ......
                  </subclass>
            2.每個(gè)子類(lèi)都應(yīng)該定義它自己的持久化屬性和子類(lèi)。<version>和<id>屬性可以從根父類(lèi)繼承下去。在一棵繼承樹(shù)上的每個(gè)子類(lèi)都必須定義一個(gè)唯一的discriminator-value。如果沒(méi)有指定,就會(huì)使用Java類(lèi)的全限定名。
            3.必須在子類(lèi)的影射中指定extends屬性來(lái)指定已影射的超類(lèi)。

           (二)在jBPM中的使用
           1.在jBPM的definition組的類(lèi)機(jī)構(gòu)中就采用上述的技術(shù)。其中ModuleDefinition是作為抽象父類(lèi)存在的,而ContextDefinition、FileDefinition、LoggingDefinition、SchedulerDefinition、MgmtDefinition類(lèi)是做為subclass存在的。
           2.在父類(lèi)中使用了discriminator鑒別器的技術(shù):在繼承策略中的“一個(gè)對(duì)象繼承樹(shù)應(yīng)對(duì)應(yīng)一個(gè)表”的策略中,<discriminator>元素是必須的。鑒別器字段包含標(biāo)志值,用于告知持久層應(yīng)該為某個(gè)特定的行創(chuàng)建哪一個(gè)類(lèi)別的實(shí)例。例如:
            父類(lèi)的影射片段:
              <discriminator type="char" column="CLASS_"/>
              <!-- M : org.jbpm.module.def.ModuleDefinition -->
              <!-- C : org.jbpm.context.def.ContextDefinition -->
              <!-- F : org.jbpm.file.def.FileDefinition -->
              <!-- L : org.jbpm.logging.def.LoggingDefinition -->
              <!-- I : org.jbpm.scheduler.def.SchedulerDefinition -->
              <!-- T : org.jbpm.taskmgmt.def.TaskMgmtDefinition -->
              <!--  :  -->
              <!--  :  -->
           3.鑒別器字段的實(shí)際值是根據(jù)<class>和<subclass>元素中的discriminator-value屬性得來(lái)的
           例如:
            父影射文件:
            <class name="org.jbpm.module.def.ModuleDefinition"
                   table="JBPM_MODULEDEFINITION"
                   abstract="true"
                   discriminator-value="M"
                   lazy="false">
                 子影射文件:
            <subclass name="org.jbpm.context.def.ContextDefinition"
                      extends="org.jbpm.module.def.ModuleDefinition"
                      discriminator-value="C"
                      lazy="false">
                 </subclass>
          posted on 2005-10-03 10:22 java世界暢談 閱讀(4601) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): JBPM

          評(píng)論

          # re: Hibernate的subclass用法 2005-12-06 17:29 p
          不錯(cuò)
            回復(fù)  更多評(píng)論
            

          # re: Hibernate的subclass用法 2007-04-28 14:28 necropolis
          講的很清楚,簡(jiǎn)明扼要  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 嵊泗县| 诏安县| 安乡县| 徐州市| 衡水市| 嘉峪关市| 德保县| 仙游县| 炎陵县| 万山特区| 台州市| 华容县| 泾川县| 佛坪县| 库伦旗| 奉化市| 凤城市| 开封县| 中牟县| 昌乐县| 桦南县| 庄河市| 迁安市| 油尖旺区| 从化市| 铅山县| 江源县| 隆回县| 襄汾县| 广饶县| 耿马| 福鼎市| 岳普湖县| 舞阳县| 隆化县| 常德市| 京山县| 新晃| 朝阳区| 泰兴市| 双鸭山市|