如何扩展JPA Annotation以更好的支持OR Mapping - 编程入门网
OperatingSystem")
@Category(value="System")
@Inheritance(strategy=InheritanceType.JOINED)
public class OperatingSystem extends System{
…
/**
* A string describing the operating system version number.
*/
@Column(name="OSVersion",length=64)
@Basic
private String OSVersion;
…
}
扩展的 annotation 及其使用 在实际应用中,JPA 已有的 annotation 往往不能满足 OR 映射的所有需求。以下介绍通 过自定义 Annotation 来扩充 OpenJPA 功能的方法,从而可以更好满足实际应用的需求。 @AbstractWithTable 在 OpenJPA 中,针对实体之间的继承关系如何在数据库中展现,共有三种方式: SINGLE_TABLE,TABLE_PER_CLASS 和 JOINED。 当应用程序使用 TABLE_PER_CLASS 这种方式时,Java 的抽象类(Abstract Class)在 OpenJPA 中不会被映射到数据库中的表项,同时抽象性阻止了用户不能通过 OpenJPA 直接对 该类进行持久化的操作。有些应用需要保持一个类在持久化操作方面的抽象性,但是又能保 证该类在数据库中有对应的表项。那么该类必须被定义为 Java 的具体类,同时引入 @AbstractWithTable(如清单 2): 清单 2. @AbstractWithTable 的定义
如何扩展JPA Annotation以更好的支持OR Mapping(3)时间:2011-04-19 IBM 周蕾蕾 胡光辉 赵 成@AbstractWithTable 的使用方式如清单 3 所示: 清单 3. 应用 @AbstractWithTable 定义实体类
从清单 3 中可见,除了 @Entity 之外,@AbstractWithTable 和 @EntityListeners 也 被应用到类 TestAWT 中。其中 @AbstarctWithTable 就是用来指定这个抽象类需要一个数据 库表,同时类 TestAWT 并没有使用 abstract 这个 Java 关键字。 OpenJPA 提供了 @EntityListeners 指定进行持久化操作前后的回调函数。定义 TestAWT 的回调函数如下清单 4 所示。 清单 4. 处理 @AbstractWithTable 的回调函数
在回调函数中检测相关对象是否设置了 @AbstractWithTable,如果 @AbstractWithTable 被应用到某个类,异常将被抛出来从而阻止将此对象存入数据库中。这样通过 @AbstractWithTable 和回调函数就达到了控制类的 JPA 的持久化操作权限和该类能映射到 数据库的表项的目的。 @MaximumValue 和 @MinimumValue 数据库中最常见的情况就是对某个字段的取值范围定义约束条件(Constraint),比如学 生的考试成绩取值范围必须在 0 到 100 这个范围内。但是 OpenJPA 没有提供相应的 Annotation 来指定某个属性的取值范围。 为了解决这个问题,自定义的 Annotation:@Maximum 和 @Minimum 被引入,如下清单 5 和 6 所示。它们分别用来表示最大值和最小值。 清单 5. @MaximiumValue 和 @MinimiumValue 的定义
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |