|
前一次做个系统用的Oracle数据库,使用hibernate生成主键的策略是SEQUENCE,当时觉得很累,因为不知道怎么的,oracle+sequence+trigger怎么也取不到新增数据时的主键值。
这次就把重点放这里了,同时还有两个新的问题,
1。到底哪种hibernate生成主键的策略,性能优一点;
2。主键生成策略最好是能跨数据库的。
大家都说性能,oracle都是用的sequence,所以主键还是想用这个方式生成。
接着就是返回新增数据的主键
native
根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个;
也就是说,主键生成,由hibernate选择。
native 和dentity都是数据库id序列号生成策略,native 是hibernate自动选择生成,identity是自己选择,identity是mysql,sql2000等数据库生成方式,与之对应还有一个sequences是oracle等生成方式,一般来说都用native 由hibernate 自动选择可以了
对于内部支持标识字段的数据库(DB2、MySQL、Sybase 和 MS SQL),你可以使用 identity 关
键字生成。对于内部支持序列的数据库(DB2、Oracle、PostgreSQL、Interbase、McKoi 和 SAP
DB),你可以使用 sequence 风格的关键字生成。这两种方式对于插入一个新的对象都需要两次
SQL 查询。
查询了一下更多的网上资料,不知道在哪里看到了,这种生成主键的策略,如果是mysql,他会选择auto_increment方式生成主键;如果是oracle,他会选择sequence方式;只是在使用oracle数据库时,需要创建一个hibernate_sequence,这是hibernate保留的,不建会报错(测试过)。 |
上一篇:关于类中静态,非静态,构造方法的执行顺序总结下一篇:处理并发Timestamp和ConcurrencyCheck区别
|