Welcome 微信登录

首页 / 软件开发 / JAVA / 使用Apache OpenJPA开发EJB 3.0应用,第5部分: 实体标识的自动生成

使用Apache OpenJPA开发EJB 3.0应用,第5部分: 实体标识的自动生成2011-08-31 IBM 肖菁数据的唯一性是所有应用程序非常基本的要求,由开发者或者用户来维护这种 唯一性存在着较大的风险,因此,由系统自动产生唯一标识是一种常见的做法。 OpenJPA 中支持四种不同的实体标识自动生成策略:

容器自动生成的实体 标识;

使用数据库的自动增长字段生成实体标识;

根据数据库序 列号(Sequence)技术生成实体标识;

使用数据库表的字段生成实体标识 ;

这四种方式各有优缺点,开发者可以根据实际情况进行选择。

可选择的注释

要让容器和数据库结合管理实体标识的自动生成,根据实际 情况的不同,开发者可以选择 javax.persistence.* 包下面的 GeneratedValue 、SequenceGenerator、TableGenerator 三个注释来描述实体的标识字段。

@javax.persistence.GeneratedValue

每一个需要自动生成实体标 识的实体都需要为它的实体标识字段提供 GeneratedValue 注释和相应的参数, OpenJPA 框架会根据注释和参数来处理实体标识的自动生成。

使用 GeneratedValue 注释自动生成的实体标识可以是数值类型字段如 byte、short、 int、long 等,或者它们对应的包装器类型 Byte、Short、Integer、Long 等, 也可以是字符串类型。

GeneratedValue 注释可以支持两个属性 strategy 和 generator。

strategy

strategy 是 GenerationType 类型的枚 举值,它的内容将指定 OpenJPA 容器自动生成实体标识的方式。strategy 属性 可以是下列枚举值:

GeneratorType.AUTO

表示实体标识由 OpenJPA 容器自动生成,这也是 Strategy 属性的默认值。

GenerationType.IDENTITY

OpenJPA 容器将使用数据库的自增长字 段为新增加的实体对象赋唯一值,作为实体的标识。这种情况下需要数据库提供 对自增长字段的支持,常用的数据库中,HSQL、SQL Server、MySQL、DB2、Derby 等数据库都能够提供这种支持。

GenerationType.SEQUENCE

表示使用数据库的序列号为新增加的实体对 象赋唯一值,作为实体的标识。这种情况下需要数据库提供对序列号的支持,常 用的数据库中,Oracle、PostgreSQL 等数据库都能够提供这种支持。

GenerationType.TABLE

表示使用数据库中指定表的某个字段记录实体 对象的标识,通过该字段的增长为新增加的实体对象赋唯一值,作为实体的标识 。