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