一:主键生成策略大体分类: 1:hibernate 负责对主键ID赋值 2:应用程序自己为主键ID赋值(不推荐使用) 3:底层数据库为主键ID赋值
二:具体用法
1:increment:(跨平台的) 以递增的方式为代理主键赋值,每次维护的当前实例中取出一个最大值,在最大值的基础之上再进行加法,适合只有单个应用进程访问数据的情况,否则会产生并发冲突问题(主键重复)。并且oid 的类型必须是long ,int ,short类型的。
2:assigned :由程序员给赋值,(不建议使用)
3:identity:是由底层的数据库来生成主键,他要求底层数据库支持自动增长,并且把主键定义成自动增长类型的 ,oid 必须是long ,int ,short 类型的。 Oracle 不支持。Mysql 支持
4:sequence:由底层的数据根据序列来生成主键。oracle ,db2数据库支持,mysql不支持
5:native:(跨平台的) 由hibernate 自己跟据不同的数据库的主键生成方式,自己选择生成方式(可以跨平台)
6:hilo :(跨平台的),通过hi/lo算法实现主键的生成机制,但是需要额外的表来保存主键的生成历史,使用时要先插入一个值。 使用规则: 通用性和安全性:
7:seqhilo:取得sequence的值,来生成高位,产生id。 但是只能使用于有sequence的数据库(oracle , db2);
8:uuid.hex: 用系统时间和ip地址等具有天然唯一性的资源进行计算,生成id, 全球唯一。生成的是一个128位的二进制数。然后把这个二进制数,转化成一个16进制的数(32位),再转化为字符串付给我们的id。那么我们的实体类的oid以及数据库的主键都需要随之改为字符串类型的。
9:foreign 用于共享主键的时候。(一对一主键关联);