hibernate主键配置

assigned
主键由外部程序负责生成,在 save() 之前必须指定一个。Hibernate不负责维护主键生成。与Hibernate和底层数据库都无关,可以跨数据库。在存储对象前,必须要使用主键的setter方法给主键赋值,至于这个值怎么生成,完全由自己决定,这种方法应该尽量避免。
<id name="id" column="id">
<generator class="assigned" />
</id>
“ud”是自定义的策略名,人为起的名字,后面均用“ud”表示。
特点:可以跨数据库,人为控制主键生成,应尽量避免。
native
由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,灵活性很强,主键由hibernate维护

sequence(oracle)

采用数据库提供的sequence机制生成主键,需要数据库支持sequence。如oralce、DB、SAP DB、PostgerSQL、McKoi中的sequence。MySQL这种不支持sequence的数据库则不行(可以使用identity)。
<generator class="sequence">
<param name="sequence">hibernate_id</param>
</generator>
<param name="sequence">hibernate_id</param> 指定sequence的名称
Hibernate生成主键时,查找sequence并赋给主键值,主键值由数据库生成,Hibernate不负责维护,使用时必须先创建一个sequence,如果不指定sequence名称,则使用Hibernate默认的sequence,名称为hibernate_sequence,前提要在数据库中创建该sequence。
特点:只能在支持序列的数据库中使用,如Oracle。
identity(mysql)
由底层数据库生成标识符。identity是由数据库自己生成的,但这个主键必须设置为自增长,使用identity的前提条件是底层数据库支持自动增长字段类型,如DB2、SQL Server、MySQL、Sybase和HypersonicSQL等,Oracle这类没有自增字段的则不支持
例:如果使用MySQL数据库,则主键字段必须设置成auto_increment。
id int(11) primary key auto_increment
特点:只能用在支持自动增长的字段数据库中使用,如MySQL。

 

sequence在oracle使用的时候要为其配相应的序列,在数据库新建号相应的序列以便使用,


 

uuid


使用uuid的方式配置主键的方式还是蛮简单的

1     @Id
2     @GenericGenerator(name = "systemUUID", strategy = "uuid")
3     @GeneratedValue(generator = "systemUUID")
4     @Column(length = 50)                        

这四个注解设置到id字段即可,(因为uuid是一个32位的字符串所以适当的指定一下字段长度)

在做持久化 的地方使用java生成uuid的方法即可

1 String uuid = UUID.randomUUID().toString();

 

posted @ 2016-08-26 21:29  奋斗,坚持  阅读(1450)  评论(0编辑  收藏  举报