看到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>
分享到:
相关推荐
在这里,SubClass 可能定义了一些基本的方法和属性,供其他类或窗体使用。 `clsSubClassEx.cls` 和 `clsSubClass.cls` 是类模块,它们代表了两种不同的类:SubClass 和 SubClassEx。类是对象的蓝图,定义了对象的...
在这个例子中,`Subclass` 是 `Superclass` 的子类,它继承了 `Superclass` 的所有公共属性和方法。 接下来,"Instance of Subclass" 和 "Instance of Superclass" 描述的是对象的类型。当我们创建一个子类的实例时...
总的来说,“union-subclass”是Hibernate提供的一种处理继承关系的方法,它允许我们有效地将复杂的面向对象设计映射到数据库中,同时也为我们的查询提供了灵活性。在实际开发中,熟练掌握和运用这种策略,可以提高...
通过这个示例,我们了解了如何在子类构造方法中使用`super()`关键字来调用父类的构造方法,以及如何在子类方法中调用父类的方法。这对于实现类的继承关系和复用代码是非常有用的。理解这些基本概念对于编写高效的...
这个BUG表现为在某些情况下,当使用is_subclass_of来判断一个类是否实现了某个接口时,即使该类确实实现了该接口,函数也不会返回TRUE,而是返回FALSE。具体的表现为,如果有一个接口MyInterface,一个实现了该接口...
在这个名为"subclass-dance-party"的项目中,我们聚焦于JavaScript的面向对象编程(OOP)特性,特别是子类化概念。子类化允许我们创建一个新类(子类),它继承自另一个类(父类),并可以扩展或修改其功能,这在...
2. 子类1(Subclass 1): 此子类通过使用外部的SYSREF信号作为时序参考来实现确定性延迟,从而允许数据转换器设备内部的时钟同步。这意味着所有设备可以使用共同的设备时钟并以一致的方式生成内部时钟,从而减小了由...
子类化错误的解决方法。 instanceof和stack均起作用。 安装 $ npm install --save subclass-error 用法 var SubclassError = require ( 'subclass-error' ) ; var ClientError = SubclassError ( "ClientError" , {...
使用"subclass-parameter"插件,你可以: 1. **定义参数**:在SubclassJS的应用初始化阶段,你可以设置一组参数,这些参数可以是任何JavaScript数据类型,如字符串、数字、对象等。 2. **访问参数**:在应用程序的...
标题中的“通过SubClass来处理窗口消息”是指利用Windows API中的`SetWindowLong`或`SetWindowSubclass`函数来实现对已有窗口的消息处理机制的扩展或替换。这种方法常用于自定义控件的行为,或者在不修改原有控件...
Subclassing是一种技术,通常用于拦截和修改控件的默认行为,但在本例中,我们将使用更直接的方法。 首先,我们需要准备一个位图文件,它可以是BMP或其他VB支持的图像格式。这个位图将会作为ToolBar和菜单的背景...