【第一章 Design】 6 主键生成策略

来源:互联网 发布:maven实战 源码 编辑:程序博客网 时间:2024/05/16 07:54

          根据不同的持久化对象和数据库设计,主键值通过几种不同的方式处理。使用这个技术将影响关系映射的实现。下面是一些可能情形的总结。每一种还有详细讲解。

 

           

 DbAttribute对象的主键ObjAttribute对象的主键作为 DataObject属性的主键有明确意义的主键YesYesYes从关联中提取的主键YesNoNo数据库生成主键YesNoNoCayenne生成主键YesNoNo

 

 

 

有明确意义的主键

DataObjects可以提供它们的主键值,有些时候很有效,例如一个主键包含一个社区账号,这时候处理主键和其他持久化属性没有什么特别。每一个主键(DbAttribute)将有一个ObjAttribute 映射到它,相应地实现DataObject的java类将包含一个用ObjAttribute描述的属性,这个属性值会保持在数据库。

从关联中提取的主键

一个表的主键列可能会依赖另一个表的主键列。常见的情况是使用“join”分解多到多关联,在这种情况下DataObjec通常不包含主键列映射,而是这个主键值由Cayenne自动提取自另一个关联对象的主键。

通过数据库INSERT提供的主键(自增主键)

有些时数据库有自己的生成专用主键的机制,在数据库添加记录时生成主键,这个特性成为“自增型”或“唯一标识列”。Cayenne 支持这种主键,在这种机制被使用时,在生成器中,DbEntity的主键生成必须设置为"Database-Generated"。现在MySQL和SQLServer适配器有这个特性,并且在默认状态是开启的。

 自动生成的主键

在多数情况下,数据库主键明确的关联概念在对象模型中很难适当表达。通常是使用唯一序列号标识数据库中的一行,这就意味着创建一个对应到主键的持久化对象属性需要手工操作。为了简洁操作 Cayenne 为每个对象指定一个 ObjectId ,并在内部操作管理主键的关联。生成机制依赖于使用的DbAdapter,并且用户可以定制这个子类。适配器使用下面的默认生成策略:

 

  • MySQL, PostgreSQL, HSQL适配器:从特定的AUTO_PK_TABLE查找表中,使用select/update。
  • Oracle适配器:使用Oracle序列。
  • DB2 :使用DB2序列。
  • SQLServer , Sybase 适配器: 使用存储过程绑定到 AUTO_PK_TABLE 。
  • OpenBase 适配器:通过OpenBase,使用指定特定的NEWID 机制。

为了通过主键自动生成来生成必须的数据库对象,使用CayenneModeler参考下面的步骤操作:here.

Cayenne仅支持一个表中一个列的自动主键生成.

 

Generated Columns 列的生成 

 

 

 

原文:

 

http://cayenne.apache.org/doc/primary-key-generation.html

原创粉丝点击