`
Java-primer
  • 浏览: 51122 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Hibernate的subclass用法

阅读更多
 看到jBPM中大量使用了subclass的用法,应该说这个是比较OO的,设计的非常合理。
  (一)、首先先去看看Hibernate的subclass:
  1.对于“每一个类继承树对应一个表”的策略来说,就需要使用<subclass>定义。
  <subclass>
            name="className"  //子类的全名
            discriminator-value="discriminator-value" //辨别标识,一个用于区分每个独立的子类的值
            proxy="proxyInterface" //指定一个类或接口,在延迟加载时作为代理使用
            lazy="true|false"
            dynamic-update="true|false"
            dynamic-insert="true|false"
            entity-name="entityName"
            node="element-name">
           <property ..../>
          ......
        </subclass>
  2.每个子类都应该定义它自己的持久化属性和子类。<version>和<id>属性可以从根父类继承下去。在一棵继承树上的每个子类都必须定义一个唯一的discriminator-value。如果没有指定,就会使用Java类的全限定名。
  3.必须在子类的影射中指定extends属性来指定已影射的超类。

 (二)在jBPM中的使用
  1.在jBPM的definition组的类机构中就采用上述的技术。其中ModuleDefinition是作为抽象父类存在的,而 ContextDefinition、FileDefinition、LoggingDefinition、SchedulerDefinition、 MgmtDefinition类是做为subclass存在的。
 2.在父类中使用了discriminator鉴别器的技术:在继承策略中的“一个对象继承树应对应一个表”的策略中,<discriminator>元素是必须的。鉴别器字段包含标志值,用于告知持久层应该为某个特定的行创建哪一个类别的实例。例如:
  父类的影射片段:
    <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.鉴别器字段的实际值是根据<class>和<subclass>元素中的discriminator-value属性得来的。
 例如:
  父影射文件:
  <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>
分享到:
评论

相关推荐

    Hibernate ORM - 继承关联关系之union-subclass

    总的来说,“union-subclass”是Hibernate提供的一种处理继承关系的方法,它允许我们有效地将复杂的面向对象设计映射到数据库中,同时也为我们的查询提供了灵活性。在实际开发中,熟练掌握和运用这种策略,可以提高...

    Hibernate 经典例子全

    Hibernate支持单继承和多层继承的映射,通过`&lt;subclass&gt;`或`&lt;joined-subclass&gt;`标签将子类映射到数据库中的特定表,这在设计复杂的对象模型时非常有用。 **四、一对一关系映射** 在`hibernate_one2one_ufk_1`示例...

    Hibernate3.1_学习源码

    其中重点配置方法和Hibernate中普遍采用的方法链编程的使用。还需注意可以将组合主键构建成一个实体,这样在编程时更加直观。 05 05Hibernate_EntityLayerDesign : 实体层的设计,演示两种情况: 1) 数据库表:一张...

    hibernate-html-single

    **hibernate-html-single** 是一个集合了Hibernate官方文档的HTML...通过阅读文档,开发者可以深入了解Hibernate的用法,学习如何配置、创建映射、执行查询以及管理事务等,从而更好地利用Hibernate进行数据库操作。

    Hibernate 项目图片资料

    这个“Hibernate 项目图片资料”压缩包很可能包含了一系列与Hibernate相关的图形化解释,帮助理解其核心概念、配置和使用方法。在本文中,我们将深入探讨Hibernate的关键知识点,以便更好地理解和应用。 1. **对象...

    Hibernate+中文文档

    9.1.3. 每个子类一张表(Table per subclass),使用辨别标志(Discriminator) 9.1.4. 混合使用“每个类分层结构一张表”和“每个子类一张表” 9.1.5. 每个具体类一张表(Table per concrete class) 9.1.6. Table per...

    hibernate开发与实战 源代码

    5. **Chapter 10 - 多对多(Many-to-Many)分表**:多对多关系在数据库设计中常见,Hibernate提供了一种通过中间表来管理这种关系的方法。本章可能涉及中间表的创建、映射及操作。 6. **Chapter 11 - 条件查询...

    HIBERNATE - 符合Java习惯的关系数据库持久化

    2. **访问器方法**:实体类应提供getter和setter方法,以便Hibernate通过反射机制读取和更新属性值。 3. **默认构造器**:实体类需包含无参构造器,以满足序列化和反序列化的需求。 4. **标识符属性**:实体类应有一...

    美国硅谷SVSE软件工程教育Hibernate-Lesson2

    - **事务处理**:Hibernate使用Transaction对象来管理事务,通过Transaction的begin、commit、rollback等方法控制事务的生命周期。 5. **类的继承与表的映射**:在高级映射中,Hibernate允许利用Java的继承特性来...

    @hibernate Tag Reference

    本文档旨在提供一个全面的@hibernate Tag参考指南,帮助开发人员更好地理解和使用这些标签。 #### 一、@hibernate Tag for Class Level 在类级别上应用@hibernate Tag可以定义持久化类的属性和行为。 ##### 1.1 @...

    hibernate3.2中文文档(chm格式)

    9.1.3. 每个子类一张表(Table per subclass),使用辨别标志(Discriminator) 9.1.4. 混合使用“每个类分层结构一张表”和“每个子类一张表” 9.1.5. 每个具体类一张表(Table per concrete class) 9.1.6. Table per...

    HibernateAPI中文版.chm

    9.1.3. 每个子类一张表(Table per subclass),使用辨别标志(Discriminator) 9.1.4. 混合使用“每个类分层结构一张表”和“每个子类一张表” 9.1.5. 每个具体类一张表(Table per concrete class) 9.1.6. Table per...

    最全Hibernate 参考文档

    9.1.3. 每个子类一张表(Table per subclass),使用辨别标志(Discriminator) 9.1.4. 混合使用“每个类分层结构一张表”和“每个子类一张表” 9.1.5. 每个具体类一张表(Table per concrete class) 9.1.6. Table per ...

    Hibernate中文详细学习文档

    9.1.3. 每个子类一张表(Table per subclass),使用辨别标志(Discriminator) 9.1.4. 混合使用“每个类分层结构一张表”和“每个子类一张表” 9.1.5. 每个具体类一张表(Table per concrete class) 9.1.6. Table per...

    精通Hibernate与参考文档

    这份文档详细介绍了Hibernate的API、配置、使用方法和最佳实践,是开发者解决具体问题的重要参考资料。包括但不限于: - 安装和配置Hibernate - 创建实体类和映射文件 - 开启和关闭Session - CRUD操作(创建、读取、...

    Hibernate 中文 html 帮助文档

    9.1.3. 每个子类一张表(Table per subclass),使用辨别标志(Discriminator) 9.1.4. 混合使用“每个类分层结构一张表”和“每个子类一张表” 9.1.5. 每个具体类一张表(Table per concrete class) 9.1.6. Table per ...

    hibernate 教程

    实现一个默认的构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4. 建议使用不是final的类 (可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和hashCode...

    用Hibernate映射继承关系

    ### 用Hibernate映射继承关系 #### 14.1 继承关系树的每个具体类对应一个表 在Hibernate中映射继承关系时,一种常见的策略是将...通过了解这些不同的映射策略,你可以更有效地使用Hibernate来管理你的持久层逻辑。

Global site tag (gtag.js) - Google Analytics