前一次做个系统用的oracle数据库,使用hibernate生成主键的策略是SEQUENCE,当时觉得很累,因为不知道怎么的,oracle+sequence+trigger怎么也取不到新增数据时的主键值。
这次就把重点放这里了,同时还有两个新的问题,
1。到底哪种hibernate生成主键的策略,性能优一点;
2。主键生成策略最好是能跨数据库的。
大家都说性能,oracle都是用的sequence,所以主键还是想用这个方式生成。
接着就是返回新增数据的主键
native
根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个;
也就是说,主键生成,由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保留的,不建会报错(测试过)。
如下是完全的代码:
Model:
hibernate mapping
oracle表创建脚本:
hibernate_sequence创建脚本
Hibernate DAO
DAO TEST Base Class
User DAO Test
spring bean
完美的测试成功