hibernate主键:HIbernate主键详解

HIbernate主键详解------Assigned Assigned方式由生成主键值并且要在save的前指定否则会抛出异常 
特点:主键生成值完全由用户决定和底层数据库无关用户需要维护主键值session.save的前要指定主键值主键由外部负责生成无需Hibernate参和


HIbernate主键详解------Hilo 
Hilo使用高低位算法生成主键高低位算法使用个高位值和个低位值然后把算法得到两个值拼接起来作为数据库中主键Hilo方式需要额外数据库表和字段提供高位值来源默认请况下使用表是通过hi/lo 算法实现主键生成机制需要额外数据库表保存主键生成历史状态hibernate_unique_key默认字段叫作next_hinext_hi必须有条记录否则会出现
特点:需要额外数据库表支持能保证同个数据库中主键但不能保证多个数据库的间主键Hilo主键生成方式由Hibernate维护所以Hilo方式和底层数据库无关但不应该手动修改hi/lo算法使用否则会引起主键重复异常


HIbernate主键详解------Increment 
Increment方式对主键值采取自动增长方式生成新主键值但要求底层数据库支持Sequence如OracleDB2等需要在映射文件xxx.hbm.xml中加入Increment标志符设置 
特点:由Hibernate本身维护适用于所有数据库不适合多进程并发更新数据库适合单进程访问数据库不能用于群集环境


主键按数值顺序递增此方式实现机制为在当前应用例子中维持个变量以保存着当前最大值的后每次需要生成主键时候将此值加1作为主键这种方式可能产生问题是:如果当前有多个例子访问同个数据
那么由于各个例子各自维护主键状态区别例子可能生成同样主键从而造成主键重复异常因此如果同数据库有多个例子访问此方式必须避免使用


HIbernate主键详解------Identity 
Identity当时根据底层数据库来支持自动增长区别数据库用区别主键增长方式 
特点:和底层数据库有关要求数据库支持Identity如MySQl中是auto_increment, SQL Server 中是Identity支持数据库有MySql、SQL Server、DB2、Sybase和HypersonicSQL Identity无需Hibernate和用户干涉使用较为方便但不便于在区别数据库的间移植采用数据库提供主键生成机制如DB2、SQL Server、MySQL中主键生成机制


HIbernate主键详解------Sequence 
Sequence需要底层数据库支持Sequence方式例如Oracle数据库等
特点:需要底层数据库支持序列支持序列数据库有DB2、PostgreSql、Qracle、SAPDb等在区别数据库的间移植特别从支持序列数据库移植到不支持序列数据库需要修改配置文件采用数据库提供sequence 机制生成主键如Oralce 中Sequence和hilo 类似通过hi/lo 算法实现主键生成机制只是主键历史状态保存在Sequence中适用于支持Sequence数据库如Oracle


HIbernate主键详解------Native 
Native主键生成方式会根据区别底层数据库自动选择Identity、Sequence、Hilo主键生成方式 
特点:根据区别底层数据库采用区别主键生成方式由于Hibernate会根据底层数据库采用区别映射方式因此便于移植项目中如果用到多个数据库时可以使用这种方式由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中种作为主键生成方式


HIbernate主键详解------UUID 
UUID使用128位UUID算法生成主键能够保证网络环境下主键唯也就能够保证在区别数据库及区别服务器下主键 
特点;能够保证数据库中主键唯生成主键占用比较多存贮空间由Hibernate基于128 位唯值产生算法生成16 进制数值(编码后以长度32 串表示)作为主键


HIbernate主键详解------Foreign GUID 
Foreign用于关系中GUID主键生成方式使用了种特殊算法保证生成主键支持SQL Server和MySQL


uuid.
和uuid.hex 类似只是生成主键未进行编码(长度16)在某些数据库中可能出现问题(如PostgreSQL)


foreign
使用外部表字段作为主键般而言利用uuid.hex方式生成主键将提供最好性能和数据库平台适应性

Tags:  hibernate联合主键 hibernate主键生成 hibernate复合主键 hibernate主键

延伸阅读

最新评论

发表评论