使用Apache OpenJPA开发EJB 3.0应用,第5部分: 实体标识的自动生成 - 编程入门网
在这四种不用的 情况下,如何使用 OpenJPA 提供的注释,结合具体数据库支持的特性,如自增长 字段、序列号等来实现实体标识的自动生成。
容器自动生成 OpenJPA 容器默认的实体标识自动生成策略是由容器管理实体标识的自动 生成,容器管理的实体标识可以支持数值型和字符型两种。当容器管理的实体标 识是数字型时,OpenJPA 容器自动创建一个数据库表 OPENJPA_SEQUENCE_TABLE, 用其中的 SEQUENCE_VALUE 字段来记录实体的实体标识的增长。 当容器管 理的实体标识是字符串类型时,OpenJPA 支持使用 uuid-string 和 uuid-hex 两 种方式生成相应的实体标识。如果我们选择使用 uuid-string 方式生成实体标识 时,OpenJPA 框架会自动为实体生成一个 128 位的 UUID,并且将这个 UUID 转 化为使用 16 位字符表示的字符串。如果我们选择使用 uuid-hex 方式生成实体 标识时,OpenJPA 框架会自动为实体生成一个 128 位的 UUID,并且将这个 UUID 转化为使用 32 位字符表示的 16 进制的字符串。 数值标识 容器 管理的实体标识可以是数值型的,OpenJPA 框架管理的实体标识借助于数据库的 表来实现,在运行时 OpenJPA 框架会自动在数据库中创建表 OPENJPA_SEQUENCE_TABLE。它有两个字段:ID 和 SEQUENCE_VALUE ,这两个字段 都是数值类型,其中 ID 是表的主键字段,它的内容是查询当前实体标识时所使 用的关键词,默认值是 0。而 SEQUENCE_VALUE 记录了当前 OpenJPA 框架中当前 实体标识的历史数据,内容是已经被获取实体标识的最大数值加 1。 我们 要使用注释描述 Animal 实体的标识由容器自动生成,只需要为它的标识字段提 供 GeneratedValue 注释,并且把它的 strategy 属性设置为 GenerationType.AUTO , Animal 实体类的代码片断如下: 清单 1. 标识 由容器自动生成的 Animal 实体类
使用Apache OpenJPA开发EJB 3.0应用,第5部分: 实体标识的自动生成(4)时间:2011-08-31 IBM 肖菁保存 Animal 实体的第一个实例时,OpenJPA 框架自动调用 SQL 语句 SELECT SEQUENCE_VALUE FROM OPENJPA_SEQUENCE_TABLE WHERE ID=0, 从默认保存实体标识的 OPENJPA_SEQUENCE_TABLE 表中获取实体的标识,如果不 存在 ID 为 0 的记录,OpenJPA 框架自动将实体的标识设置为 1。 容器 管理实体标识的情况下,为了获得实体标识,应用程序将不得不频繁地和数据库 交互,这会影响应用程序的运行效率。OpenJPA 中使用实体标识缓存机制解决这 个问题。默认情况下,当应用程序第一次获取实体标识时,OpenJPA 框架从数据 库中一次性获取 50 个连续的实体标识缓存起来,当下一次应用程序需要获取实 体标识时,OpenJPA 将首先检测缓存中是否存在实体标识,如果存在,OpenJPA 将直接使用缓存中的实体标识,如果不存在,OpenJPA 框架将会从数据库中再次 获取 50 个连续的实体标识缓存起来,如此类推。这样的处理方式可以大大减少 由于获取实体标识而产生的数据库交互,提升应用程序的运行效率。 当实 体标识成功获取之后,OpenJPA 框架会把当前实体标识的最大值 +1 后持久化到 数据库中。由于实体标识缓存的原因,当我们第一次获取实体标识后,OpenJPA 会将 OPENJPA_SEQUENCE_TABLE 表的 SEQUENCE_VALUE 的值设置为 51,当 OpenJPA 多次从数据库中获取实体标识后,SEQUENCE_V |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |