Hibernate内置标识符生成器

来源:互联网 发布:宁波数据工场 编辑:程序博客网 时间:2024/05/21 19:34
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。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/82195/showart_1657508.html
原创粉丝点击