【Hibernate学习笔记】内置标识符生成器的用法

1. increment标识符生成器

Hibernate: select max(ID) from CUSTOMER
Hibernate: insert into CUSTOMER (NAME, PHONE, MARRIED, ID) values (?, ?, ?, ?)

  • 由于increment生成标识符的机制不依赖于底层数据库系统,因此它适合于所有的数据库系统;
  • 适用于只有单个Hibernate应用进程访问同一个数据库的场合,在集群环境下不推荐使用它;
  • OID必须为long、int或short类型。

2. identity标识符生成器
'CREATE TABLE `customer` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT, // !!!
  `NAME` varchar(255) DEFAULT NULL,
  `EMAIL` varchar(255) DEFAULT NULL,
  `PASSWORD` varchar(255) DEFAULT NULL,
  `PHONE` int(11) DEFAULT NULL,
  `MARRIED` bit(1) DEFAULT NULL,
  `ADDRESS` varchar(255) DEFAULT NULL,
  `SEX` char(1) DEFAULT NULL,
  `DESCRIPTION` longtext,
  `IMAGE` tinyblob,
  `BIRTHDAY` date DEFAULT NULL,
  `REGISTEREDTIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8'
Hibernate: insert into CUSTOMER (NAME, PHONE, MARRIED) values (?, ?, ?)
Hibernate: select last_insert_id()
  • 由于identity生成标识符的机制依赖于底层数据库系统,因此,要求底层数据库系统必须支持自动增长字段类型。支持的数据库有:DB2、MySQL、Ms SQL Server、Sybase、HSQLDB和Informix等;【注】Oracle不支持!
  • OID必须为long、int或short类型。

3. sequence标识符生成器
  • 由于sequence生成标识符的机制依赖于底层数据库系统的序列,因此,要求底层数据库系统必须支持序列。支持的数据库有:Oracle、DB2、SAP DB和PostgreSQL等;【注】Mysql不支持!
  • OID必须为long、int或short类型。
4. hilo标识符生成器
'CREATE TABLE `hibernate_unique_key` (
  `next_hi` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8'
Hibernate: select next_hi from hibernate_unique_key for update
Hibernate: update hibernate_unique_key set next_hi = ? where next_hi = ?
Hibernate: insert into CUSTOMER (NAME, PHONE, MARRIED, ID) values (?, ?, ?, ?)

    hilo标识符生成器在生成标识符时,需要读取并修改hibernate_unique_key表中的next_hi值,这段操作需要在单独的事务中处理。
  • 由于hilo生成表和自负的机制不依赖于底层数据库系统,因此适用于所有的数据库系统;
  • high/low算法生成的标识符只能在一个数据库中保证唯一;
  • OID必须为long、int或short类型。
5. native标识符生成器
  • 根据底层数据库对自动生成标识符的支持能力,来选择使用identity、sequence或hilo标识符生成器。Mysql和MS SQL Server会选择identity,Oracle选择sequence;
  • 适合于跨数据库平台开发,即同一个Hibernate应用需要连接多种数据库系统的场合;
  • OID必须为long、int或short类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值