Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40054
  • 博文数量: 14
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-14 13:14
文章分类

全部博文(14)

文章存档

2008年(14)

我的朋友

分类: Java

2008-11-21 16:43:33

increment:适用于代理主键,由Hibernate自动以增长的方式生成标识符,增量为1。
注:使用increment,插入时,在生成的SQL语句中会有ID列。
   Example:
    
       
    

   适用范围:
  • 由于increment生成标识符的机制不依赖于底层数据库系统,因此它适用于所有的数据库系统。
  • 适用于只有单个Hibernate应用进程访问同一个数据库的场合,如果Hibernate 运行在多个应用服务器上,increment标识符生成器工作会失效。
  • OID(Object identifier)必须为short、int、long类型,如果定义为其他类型,则会抛出异常IdentifierGenerationException。
identity:适用于代理主键,由底层数据库生成标识符,前提:底层数据库支持自动增长字段类型。 如:在MySql中主键定义为auto_increment,在SQL Server中主键定义为Identity.
    Example:
    
       
    


   适用范围:
  • 由于identity生成标识符的机制依赖于底层数据库系统,因此要求底层数据库系统必须支持自动增长字段类型。支持自动增长的数据库有:DB2、SQL Server、MySql、Sybase、HSQLDB、Informix等。
  • OID必须为short、int、long类型。
sequence:适用于代理主键,Hibernate根据底层数据库序列来生成标识符,前提:底层数据库支持序列。
   Example:
    
       
          id_seq
       

    


   适用范围:
  • 由于sequence生成标识符依赖于底层数据库系统的序列,因此要求底层数据库系统必须支持序列。支持序列的数据库包括:Oracle、DB2等。
  • OID必须为short、int、long类型。
hilo:适用于代理主键,Hibernate根据Hign/Low算法来生成标识符,Hibernate把特定表的字段作为"high"值,在默认情况下选用hibernate_unique_key表的next_hi字段。
   Example:
    
       
         hi_value
         next_value
         100
    

   注:其中high值存放在hi_value表的next_value字段中。
   适用范围:
  • 由于hilo生成标识符的机制不依赖于底层数据库系统,因此适用于所有的数据库系统。
  • OID必须为short、int、long类型。

native:适用于代理主键,根据底层数据库对标识符的支持能力,自动选择identity、sequence或hilo。native能自动识别底层数据库提供的生成标识符的机制。如果数据库为sql/mysql则为identity;如果为Oracle则为sequence。
    Example:
    
       
    

适用范围:
  • 由于native能根据底层数据库系统的类型自动选择合适的标识符生成器,因此适合跨数据库平台开发。即同一个Hiberante应用需要连接多种数据库系统的场合。
  • OID类型。
assigned:适用于自然主键,由java应用程序负责生成标识符,应尽量避免使用自然主键。
    Example:
    
       
    

注:使用assigned标识符生成器时,无法使用saveOrUpdate来实现save/update。

阅读(854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~