快速业务通道

使用Apache OpenJPA开发EJB 3.0应用,第5部分: 实体标识的自动生成 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
列,另外还需要将实体类中实体标识字段的 GeneratedValue 注释的 stragety 属性的值设置为 GenerationType.IDENTITY。

我们以 Animal 实体在 HSQL 数据库中的持久化来说明如何使用自增长字段自动生成实体标识所需要采取 的步骤:

首先,我们使用下面的 SQL 语句创建 Animal 表,把它的 ID 字段设置为自动增长类型:

清单 4. 将 ID 字段设置为自动增长类型的 SQL 语句

CREATE TEXT TABLE ANIMAL (  ID INTEGER  GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL  PRIMARY KEY,  NAME VARCHAR(255) NOT NULL )

在数据库部分将表的主键字段设置为自动增长字段后,在实体 Animal 的定义中 ,我们需要将 id 字段 GeneratedValue 注释的 stragety 属性的值设置为 GenerationType.IDENTITY。Animal 实体类修改后的代码片段如下。

清单 5. 标识由自增长字段生成的 Animal 实体类

1. import  javax.persistence.Entity; 2. import  javax.persistence.GeneratedValue; 3. import  javax.persistence.GenerationType; 4. import  javax.persistence.Id; 5. 6. @Entity 7. public class  Animal { 8. @Id 9. @GeneratedValue (strategy=GenerationType.IDENTITY) 10. private long id; 11. private String name; 12. 13.  … 14. 15. }

使用Apache OpenJPA开发EJB 3.0应用,第5部分: 实体标识的自动生成(6)

时间:2011-08-31 IBM 肖菁

序列号(Sequence)

序列号是 Oracle、 PostgreSQL 等数据库提供的一种特性,用于为数据库的记录提供自动增长的编号 ,使用 Oracle、PostgreSQL 等数据库应用程序的设计者通常期望将实体标识的 自动生成委托给数据库的这种特性,OpenJPA 框架中的实体标识能够满足应用程 序设计者的要求,使用数据库的序列号为实体自动生成标识。

要将实体标 识的自动生成委托给数据库的序列号特性,需要数据库和实体定义的双方配合才 能够达到:首先,必须在数据库中创建合适的序列号,另外还需要为实体标识字 段提供 SequenceGenerator 注释,设置它的参数,为实体类提供关于序列号的信 息,同时将实体类中实体标识字段的 GeneratedValue 注释的 stragety 属性的 值设置为 GenerationType.SEQUENCE,将 generator 属性的值设置为 SequenceGenerator 注释的 name 属性的值。

我们以 Animal 实体在 Oracle 数据库中的持久化来说明如何使用自增长字段自动生成实体标识所需要采 取的步骤:

首先,在 Oracle 数据库中运行下面的 SQL 语句创建名为 HelloWorldSequence 的序列号,序列号支持 cache,大小为 50:

清单 6. 创建序列号的 SQL 语句

CREATE SEQUENCE  HELLOWORLDSEQUENCE START WITH 0 INCREMENT BY 1 MINVALUE 1 CACHE 50 NOCYCLE NOORDER

然 后,在 Oracle 数据库中,我们使用下面的 SQL 语句创建 ANIMAL 表:

清单 7. 创建 ANIMAL 表

CREATE TABLE EOS52.ANIMAL (  ID CHAR(10),  NAME VARCHAR2(100) NOT NULL,   CONSTRAINT PK_ANIMAL PRIMARY KEY (ID ) )

在数据 库部分创建合适的序列号和相应的数据库表后,在实体 Animal 的定义中,我们 需要将 id 字段 GeneratedValue 注释的 stragety 属性的值设置为 GenerationType.SEQUENCE,设置它的 generator 属性的值为 SeqGenerator。我 们还需要为 id 字段提供另外一个相关的注释 SequenceGenerator,设置它的 name 属性为 SeqGenerator,设置它 sequenceName 属性为 HelloWorldSequence 。Animal 实体类修改后的代码片段如下。

清单 8. 标识由序列号生成的 Animal 实体类

1. import javax.persistence.Entity; 2.  import javax.persistence.GeneratedVal

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号