快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
ue; 3. import  javax.persistence.GenerationType; 4. import  javax.persistence.Id; 5. 6. @Entity 7. public class  Animal { 8. @Id 9. @GeneratedValue(strategy =  GenerationType.SEQUENCE, generator = "SeqGenerator") |------- 10--------20--------30--------40--------50--------60--------70-------- 80--------9| |-------- XML error: The previous line is  longer than the max of 90 characters ---------| 10.  @SequenceGenerator(name = "SeqGenerator", sequenceName = "  HelloWorldSequence") 11. private long id; 12. private  String name; 13. 14.  … 15. 16. }

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

时间:2011-08-31 IBM 肖菁

数据库表

除了使用容器生成的实体标识,或者借助于数据 库的自增长字段或者序列号等方式生成实体标识之外,我们还可以选择借助数据 库表来自动生成实体标识。原理是我们提供一个独立的数据库表,该表的主键列 ( 假设列名 ID) 记录实体编号的特征字符串 ( 假设存在一条记录的 ID 为 customID),另外一列 ( 假设列名为 SEQUENCE_VALUE) 记录该特征字符串对应实 体标识的最大值。编写实体代码时,我们指定实体标识由数据库表中指定的特征 字符串 ( 如 customID) 对应的列 SEQUENCE_VALUE 处理,当有新的实体被持久 化时,容器将获取行 customID、列 SEQUENCE_VALUE 对应的数值 +1 后作为新实 体的标识,同时将该列的值也自动 +1。

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

我们以 Animal 实体类来说 明使用数据库表自动生成实体标识所需要采取的步骤:我们假设存在这样的场景 ,Animal 实体的标识由应用程序中自定义的数据库表 MY_KEYS 自动生成, MY_KEYS 表中有两列,一列是 KEYID,它保存实体标识的特征值,一列是 KEYVALUE,它保存实体当前的最大编号,除此之外,我们还决定使用 ANIMALID 作为 Animal 实体标识的特征字符串。

首先,在数据库中使用下面的 SQL 语句创建名为 MY_KEYS 的数据库表。在 OpenJPA 容器中,如果我们没有创建 MY_KEYS 表,OpenJPA 容器将帮我们自动生成对应的表结构。

清单 9. 创 建数据库表 MY_KEYS

CREATE TABLE MY_KEYS (   KEYID  VARCHAR(255) NOT NULL,   KEYVALUE BIGINT,   PRIMARY  KEY (KEYID) )

在数据库部分创建合适的数据库表后,在 实体 Animal 的定义中,我们需要将 id 字段 GeneratedValue 注释的 stragety 属性的值设置为 GenerationType.TABLE,设置它的 generator 属性的值为 TableGenerator。我们还需要为 id 字段提供另外一个注释 TableGenerator,设 置它的 name 属性为 TableGenerator,设置它的 table 属性为 MYKEYS、 pkColumnName 属性为 KEYID、valueColumnName 属性为 KEYVALUE、 ANIMALID 属性为 ANIMALID。Animal 实体类修改后的代码片段如下。

清单 10. 标 识由数据库表生成的 Animal 实体类

1. import  javax.persistence.Entity; 2. import  javax.persistence.GeneratedValue; 3. import  javax.persistence.GenerationType; 4. import  javax.persistence

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