主键生成器
| 描述
|
increment
| 代理主键。由hibernate维护一个变量,每次生成主键时自动以递增。
问题:如果有多个应用访问一个数据库,由于每个应用维护自己的主键,所以此时主键可能冲突。建议不采用。
优点:可以方便跨平台
缺点:不适合高并发访问
|
identity
| 代理主键。由底层数据库生成表识符。条件是数据库支持自动增长数据类型。比如:mysql的自增主键,oracle不支持主键自动生成。
如果数据库支持自增建议采用。
优点:由底层数据库维护,和hibernate无关
缺点:只能对支持自动增长的数据库有效,例如mysql
|
sequence
| 代理主键。Hibernate根据底层数据库序列生成标识符。条件是数据库支持序列。比如oracle的序列。
如果数据库支持序列建议采用。
优点:由底层数据库维护,和hibernate无关
缺点:数据库必须支持sequence方案例如oracle
|
native
| 代理主键。根据底层数据库对自动来选择identity、sequence、hilo
由于生成主键策略的控制权由hibernate控制,所以不建议采用。
优点:在项目中如果存在多个数据库时使用
缺点:效率比较低
|
uuid
| 代理主键。Hibernate采用128bit位的UUID算法来生成标识符。该算法
能够在网络环境中生成唯一的字符串标识符。
生成算法:
IP地址,JVM的启动时间(精确到1/4秒),系统时间和一个计数器值(在JVM中唯一)。
此策略可以保证生成主键的唯一性,并且提供了最好的数据库插入性能和数据库平台的无关性。建议采用。
优点:与数据库无关,方便数据库移植,效率高,不访问数据库就可以直接生成主键值,并且它能保证唯一性。
缺点:uuid长度大(32位),占用空间比较大,对应数据库中类型 char varchar
|
assigned
| 自然主键。由java程序负责生成标识符。
不建议采用。
尽量在操作中避免手动对主键操作
|