一,概述
在Hibernate的映射文件中可以通过<generator class="XXX"></generator>来指定主键的生成策略,不同的主键生成策略还是有一些区别的,有时为了需求,还得指定特定的主键生成策略,方便开发.
二,关于主键
1)一个表能否有多个主键?为什么要设置主键?
不能;数据库存储的数据都是有效的,必须保持每张表的每条记录唯一!
2)为什么通常喜欢将id设置为主键?
因为表中通常找不到合适的列作为作为唯一列即主键,所以为了标识方便就使用了id列,因为id是数据库系统维护的,可以保证唯一,因此把这列作为主键!
3)联合/复合主键
如果找不到合适的列作为主键,除了使用id列外,还可以使用复合主键,即将多列作为主键,从而唯一标识表中的每一条记录,保证唯一性!
三,主键的生成策略
1)主键的生成策略
identity sequence native increment assigned uuid foreign.
2)区别
1)identity:自增长(mysql db2).
2)sequence:自增长(序列),oracle数据库是以序列方法实现的.
3)native:自增长,会根据底层数据库自增长的方式现在identity或sequence.如果是mysql数据库,采用的自增长方式为identity;如果是oracle数据库,采用的自增长方式是sequence.
4)increment:自增长(会有并发访问的问题,一般在服务器集群环境使用会存在问题).
5)assigned:自定主键生成策略为手动指定主键的值.
6)uuid:指定uuid随机生成唯一的值.
7)foreign:使用外部表的字段作为主键(one-to-one时会用到).
四,总结
最近无法静下心来学习...好烦...