孙卫琴hibernate05映射对象标识符

Hibernate 的内置标识符生成器 1 increment 适用于代理主键,由Hibernate自动一递增的方式生成标识符,每次增加1 2 indentity 适用于代理主键。由底层数据库生成标识符。前提是底层数据库支持自动增长字段类型。 3 sequence 适用于代理主键。Hibernate根据底层数据库的序列来生成标识符。前提条件是底层数据库支持序列。 4 hilo 适用于代理主键。Hibernate根据high/low算法来生成标识符。Hibernate把特定的表的字段作为high值。默认情况下选用hibernate_unique_key表的nest_hi字段。 5 native 适用于代理主键。根据底层数据库对自动生成标识符的支持能力,来选择 identity sequence 或 hilo 6 uuid.hex 适用于代理主键。Hibernate采用128位的UUID算法来生成标识符。UUID算法在网络环境下生成唯一的字符串标识符。这种字符串生成策略不流行,因为字符串类型的主键比整数类型的主键占用更多的数据库空间。 7 assigned 适用于自然主键。由java程序生成标识符,为了能让java程序设OID不能把setId()方法设置成 private。尽量避免使用自然主键。 适用的数据库 例如DB Increment 所有 ………………….. Indentity 要求支持自动增长字段 DB2 ,Mysql, MS SQL Server Sequence 要求支持序列 Oracle ,DB2 Hilo 所有数据录 Native 所有 根据数据库类型选择标识符生成器 分析: Increment :Hibernate在初始化的阶段读取表的最大主键值, Hibernate: select max(ID) from increment_tester 向表中插入数据的时候,主键在max(ID)的基础上递增1。当两个Hibernate应用进程访问同一个数据库表时,就会出现违反数据库的完整性约束,导致进程的插入操作失败。(两个进程插入的主键值相同),因此 increment标识符生成器仅适用于单个H进程访问数据库的情况。即使同一个进程创建了连接数据库的多个SessionFactory实例,也将导致插入失败。Increment适用于运行在单个应用服务器上,多个的就不行了。 Indentity:委托各底层数据库负责生成标识符。要球数据库把主键定义为自动增长类型。 Native: 根据底层数据库对自动生成标识符的支持能力,选择 identity squece 或者hilo标识符生成器。 如果时Mysql和 MS SQL Server 选用identity;如果为Oracle则选用Squece标识符生成器。适合跨数据库平台开发。 例子代码: 1、Increment 数据库表 create table INCREMENT_TESTER ( ID bigint not null, NAME varchar(15), primary key (ID) ); 影射文件: 2 、Native 数据库 create table NATIVE_TESTER ( ID bigint not null auto_increment, name varchar(15), primary key (ID) ); 映射文件: 3 identity 数据库: create table IDENTITY_TESTER ( ID bigint not null auto_increment, name varchar(15), primary key (ID) ); 映射文件: 其实identity和native是一样的,indentity委托给底层数据库生成主键,由于我用的是Mysql数据库,native也是选用identity来具体操作的。 4 hilo 数据库: 两张表 create table HILO_TESTER ( ID bigint not null, name varchar(15), primary key (ID) ); create table hi_value ( next_value integer ); insert into hi_value values ( 0 ); hilo通过high/low算法生成标识符,其中 hi_value中存放的就是high值。hibernate负责生成主键值,每次持久化对象时,需要读取并修改hi_value表中的 next_value值。我们看到的结果是:当每次执行插入操作时 high值会自动增加1,主键值的高位比next_value值大1。映射文件: hi_value next_value 100
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值