Hibernate(11)*.hbm.xml文件中主键增长策略
来源:互联网 发布:java开发人员招聘要求 编辑:程序博客网 时间:2024/06/05 05:43
1 对象标识符(OID Object id)
hibernate中的持久化对象对应数据库中的一张数据表,因此区分不同的持久化对象,在Hibernate中是通过OID来完成的,从表的角度看,OID对应表的主键;从类的角度看OID对应类的主键属性。
2 常用8种主键增长策略
① increment标识符生成器
由HIbernate自动以递增方式生成标识符,每次增量为1.
- 优点:不依赖于底层数据库系统,适用于所有的数据库系统。
- 缺点:使用于单进程环境下,在多线程环境下很可能产生相同的主键值,而且OID必须为数值类型,比如long,int,short类型
配置方式:
<id name="sid" type="java.lang.Integer"> <column name="SID" precision="22" scale="0" /> <generator class="increment" /></id>
② identity标识符生成器
由底层数据库生成标识符。
前提条件:数据库支持自动增长字段类型,比如(SQL Server, MySQL),而且OID必须为数值类型,比如long,int,short类型。
配置方式:
<id name="sid" type="java.lang.Integer"> <column name="SID" precision="22" scale="0" /> <generator class="identity" /></id>
③sequence标识符生成器
依赖于底层数据库系统的序列
前提条件:需要数据库支持序列机制(如:Oracle等),而且OID必须为数值类型,比如long,int,short类型。
配置方式:
<id name="id" type="java.lang.Integer"> <generator class="sequence"> <param name="sequence">mes_seq</param> </generator></id>
④hilo标识符生成器
hilo标识符生成器由Hibernate按照一种hign/low算法生成标识符,它从数据库中的特定表的字段中获取high值,因此需要额外的数据库表保存主键生成的历史状态,hilo生成方法不依赖于底层数据库,因此适用于每一种数据库,但是OID必须为数值类型。
配置方式:
<id name="id" type="java.lang.Integer"> <generator class="hilo"> <param name="table">my_hi_value</param> <param name="column">next_value</param> </generator></id>
⑤native标识符生成器
native生成器能根据底层数据库系统的类型,自动选择合适的标识符生成器,因此非常适用于跨数据库平台开发,它会由Hibernate根据数据库适配器中的定义,自动采用identity、hilo、sequence中的一种作为主键生成方式,但是OID必须为数值类型。
配置方式:
<id name="sid" type="java.lang.Integer"> <column name="SID" precision="22" scale="0" /> <generator class="native" /></id>
⑥ assigned标识符生成器
采用assigned生成策略,表示由应用程序逻辑(手动指定)来负责生成主键标识符,OID类型没有限制。
配置方式:
<id name="sid" type="java.lang.Integer"> <column name="SID" precision="22" scale="0" /> <generator class="assigned" /></id>
⑦uuid标识符生成器
由Hibernate基于128位唯一值产生算法,根据当前设备IP,时间,JVM启动时间,内部自增量等4个参数生成16进制数值作为主键,一般而言,利用uuid方式生成的主键提供最好的数据插入性能和数据库平台适应性。OID使用String类型,不能使用数值型
配置方式:
<id name="sid" type="java.lang.String" column="SID"> <generator class="uuid" /></id>
⑧foreign标识符生成器
在one-to-one的关系中,有一张表的主键来决定自己的主键/外键(http://blog.csdn.net/u013943420/article/details/71195266#t3)
配置方式:
<many-to-one name="student" class="com.test.domain.Student" fetch="select"> <column name="SID" precision="22" scale="0" /></many-to-one>
⑨复合主键(至少两个字段组合作为主键)
在*.hbm.xml中的配置:
第一种方式:以独立主键类映射复合主键,这样达到将逻辑加以隔离的目的;
<composite-id name="id" class="com.test.domain.StudentId"> <key-property name="cusname" type="java.lang.String"> <column name="STUNAME" length="40"></column> </key-property> <key-property name="homeaddress" type="java.lang.String"> <column name="HOMEADDRESS" length="50"></column> </key-property></composite-id>
3 OID生成策略选用简单原则
- 针对Oracle:主键是数值型,一般选择sequence;主键是String类型,使用uuid或assigned
- 针对MySQL:主键是数值型,一般选择increme/assigned;主键是String类型,使用uuid或assigned
- 针对SQLServer:主键是数值型,一般使用identity、native、assigned;主键是String,使用uuid或assigned
- Hibernate(11)*.hbm.xml文件中主键增长策略
- hibernate的增长策略和hbm.xml文件配置详解
- hibernate主键增长策略
- Hibernate主键增长策略
- hibernate hbm.xml 配置文件中的主键生成策略
- Hibernate主键的增长策略
- hibernate的主键增长策略
- Hibernate数据检索策略和.hbm.xml映射文件
- hibernate联合主键hbm.xml配置
- Hibernate产生自动增长类型主键策略
- Spring+Hibernate配置hbm.xml文件在jar文件中。
- Hibernate的hbm.xml文件中相关属性说明
- 关于hibernate中hbm.xml文件报错的解决
- Hibernate 中 .hbm.xml映射文件 路径问题
- eclipse中hibernate反创建java和hbm.xml文件
- Hibernate中,各表映射文件...hbm.xml详解
- hibernate中....hbm.xml文件的配置说明
- Hibernate中.hbm.xml文件的常用设置
- Python装饰器学习(九步入门)
- js代码调试技巧
- Spring概述
- codeforces 796C
- [G+SMO]生成包含interface的多片数据
- Hibernate(11)*.hbm.xml文件中主键增长策略
- 【Spring】使用FactoryBean配置Bean
- cacls命令设置文件及其文件夹权限的方法
- (caicloud) tensorboard 可视化—9.3监督指标可视化
- Python中for循环和while循环
- C语言小知识点
- DES ,AES加密解密的实现
- #leetcode#329. Longest Increasing Path in a Matrix
- daplink usb full-speed/high-speed到底差距多大