主键增长策略
increment===自增,每次增加1,
主键类型是long。short,int才能自增
优点:不依赖于底层数据库,适用于所有数据库。
但是不要用在多进程。
select max(id) from user
indentity==适用于mysql,sqlserver等,不支持orcle
主键类型是数值
由底层数据库生成标识符
前提条件:数据库支持自增长字段类型,比如mysql,sql server
sequence==
依赖于底层数据库系统的序列
前提条件:需要数据库支持序列机制,如orcle
hilo==高低位,由hibernate按照一种high/low算法生成的标识符
从数据库特定表中获取high值,需要创建额外的表(配置
之后,会在数据库自动生成这个表),
hilo生成方法不依赖于底层数据库,使用与任何数据库。
数值型
native==根据底层数据库类型,自动选择合适的策略
包括identity,sequence或hilo的一种。
主键类型数值型
assigned==表示由应用程序逻辑来负责生成主键标识符
自己设置分配主键,
所以主键类型都可以
uuid==由hibernate基于128位唯一值产生算法,
根据当前的设备ip,时间,jvm启动时间,
内部自增量等4个参数生成16进制值作为主键,
主键类型==string类型
foreign==在one-to-one关系中,
一个表的主键由另一个表的主键决定
<id name="cardId" column="cardId" type="int"> <generator class="foreign"> <param name="property">student</param> </generator> </id>
映射复合主键==尽量避免,不用复合的
1,数据不稳定
2,效率不好
主键策略使用原则
针对orcle==主键是int/short/long 建议使用sequence,
主键是string,建议使用uuid或者assigned
针对mysql==主键是int/short/long 建议使用 increment assigned
主键是字符串 使用uuid assigned
针对sql server==主键是int/short/long 建议使用 indentity assigned
native 主键是字符串 使用uuid assigned