快速业务通道

如何扩展JPA Annotation以更好的支持OR Mapping - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

如何扩展JPA Annotation以更好的支持OR Mapping

时间:2011-04-19 IBM 周蕾蕾 胡光辉 赵 成

JPA 和 OpenJPA 简介

随着面向对象的数据模型被广泛应用,将面向对象的实体映射为关系数据库表项(OR Mapping)已经越来越多的出现在各类应用程序的开发设计之中。JPA(Java Persistence API)是 Sun Microssystems 公司制定的一个把 Java 数据对象映射成关系数据库对象的一 个标准。JPA 弥补了 JDBC、ORM、EJB2 等在 Java 对象持久化方面的不足之处,并且非常易 于使用。JPA 因大量使用了像 annotations 和 generics 等 Java 语言的新特性,需要 J2SE 1.5(也被称作 Java 5)或者更高版本的支持。Apache 的 OpenJPA 则是当前诸多热门 Java 持久化实现之一。Apache OpenJPA 是 Apache 软件基金下面的一个 Java 持久化技术 ,它可以被当作一个单独的 POJO(Plain Old Java Object)持续化使用,或者被集成到任 意 Java EE 兼容的容器或其它的轻量级框架(例如 Tomcat、Spring)等一起使用。

标准 JPA annotation 及其在 OpenJPA 中的应用

标准 JPA 提供了不少 annotation,在 OpenJPA 中这些标准的 annotation 的用法如下 :

@entity

@entity 用来声明一个类为一个持久化的实体类。该 annotation 只有唯一可选的属性, 即 name 用于指定实体的名称。

@table

@table 描述了一个实体类对应的数据库表的信息。@table 有以下属性:

String name: 表的名称。

String schema: 该表对应的 schema,如果没有指定 schema 的名称,JPA 在数据库连接 时使用默认的 schema。

String catalog: 表的目录。如果没有指定目录,JPA 在数据库连接时使用默认值。

UniqueContraint[] uniqueContraints: 应用于表的唯一性限制条件。Uniquecontraint 本身是个 annotation, 用于保证数据库表的某一列(简单数据类型或者复杂数据类型)在每 一个记录中都是唯一的。

@column

@column 定义了数据库表项的每一列的属性,具体内容包括:

String name: 指定列的名称,默认值为类的 field 名称。

String columnDefinition: 数据库系统特定的列类型名称。在 OpenJPA 中,该属性只适 用于数据库系统通过那些能够从元数据直接创建表的数据库系统。在表的创建过程中,如果 该属性值非空,那么数据库系统就以该属性指定的类型来定义指定的列。

int length:指定列的长度。

int precision:小数列的精度。

int scale:定义小数类型的列最多可以容纳的数字数目

boolean nullable: 该列是否能够接受非空的记录。

boolean insertable:定义该列是否可以通过 SQL INSERT 语句中指定生成,默认值为 true。

boolean updatable:定义该列是否可以通过 SQL UPDATE 语句中生成,默认值为 true。

String table:有的时候列并非定义在主表下,table 属性就提供了将列映射到次表下的 方法。

@ Inheritance

如何扩展JPA Annotation以更好的支持OR Mapping(2)

时间:2011-04-19 IBM 周蕾蕾 胡光辉 赵 成

在面向对象的类之间存在继承关系,@inheritance 的出现就将继承关系能够映射到关系 数据库模型中。在实体基类中定义继承策略

InheritanceType stragegy:用以声明继承策略的枚举类型,可取的值包括 SINGLE_TABLE,JOINED 和 TABLE_PER_CLASS:

InheritanceType.SINGLE_TABLE:把所有的子类及其父类都映射到同一张表中。

InheritanceType.JOINED: 类图中每个类都映射到各自的表项,但是每张表中仅仅包含 在各个层次的类中定义的列。

Inheritance.TABLE_PER_CLASS:类图中每个类都映射到各自的表现,和 JOINED 不同之 处在于每张表包含了对应的实体类所有的列。

清单 1. JPA annotation 使用范例

@Entity(name="OperatingSystem") @Table(name="

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号