主键生成策略:
assign : 主键不是由系统自动生成.而是在持久化之前需要手动指定oid。
increment :使用的时候先自动查询表中主键的最大值,然后加1.
select max( id) from xxxx . maxId + 1
只适合应用在测试环境下, 存在并发问题.
foreign :
1:1 shared primary key
xxx
sequence : 从sequence 中取值 . 适合使用在 oralce 之类的数据库中,因为有的数据库不支持序列 .
使用:
1.
不指定序列名字,默认为 hibernate_sequence
2.
liucy_seq
liucy_seq为指定的序列名。
identity : 适用于 MySQL , DB2 , SQL Server。
MySQL中的建表语句:
create table a(
id int primary key auto_increment,
name ***,
age ****,
)
MySQL支持在建表的时候指定主键的自动生成策略。指定后就可以在使用hibernate的时候指定主键的生成策略为identity。插入数据的时候就不再插入主键,而由数据库自己负责。
native:
由Hibernate 根据配置的数据库方言( dialect )自动选择一种主键生成策略( sequence , identity )。
hilo ( high low的简写 ),高低位算法:
高位 :从某个表中得到。
低位 :1 --- 15 ;
h: 当前高位值:
max : 最大低位值 ( 15 )
low : 当前低位值 1---> 15
id = ( h-1 ) * max + low //生成的id为:高位值减1,然后乘以最大的低位值,再加上低位值。
1 : 1 , 2 , 3 , 。。。。 , 15
2 : 16 , 17 , 18 , 。。。。 30
3 : 31 , 32 , 。。。。。。。 45
使用:
my_table //指定获得高位值的表。
value //指定从表中的哪一列中获得高位值。
15 //设定最大低位值。
hilo的一个“变种”:seqhilo ,在Oracle中使用,指定高位值从序列中获得。
liucy_seq
15
uuid :UUID使用128位UUID算法生成主键,能够保证网络环境下的主键唯一性,也就能够保证在不同数据库及不同服务器下主键的唯一性。
uuid生成主键时根据如下内容来生成主键以达到主键的唯一性:
虚拟机启动时间 、 当前系统时间 、 网卡mac 地址 、硬盘的设备编号.
特点;能够保证数据库中的主键唯一性,生成的主键占用比较多的存贮空间
uuid生成的主键为字符串,如果使用,建表的时候主键需要指定为varchar2(Oracle中).
我觉得,即使有可能实现,最可能的方法也是identity这个方法,在用那些数据库的时候,看建表的时候是否可以将主键值的生成指定成你要求的那样。。。
不能,只能把xml主键那一块改成native,至于你想从100001,大可以到数据库中去修改 sqlserver 2000/2005 修改主键的identity(100001,1000000)
不能 只能设成native 或者uuid的