用oracle的trigger生成主键的时候和hibernate冲突的讨论(转)
2012-06-15 14:44
435 查看
insert into table_name ... returning :id;
用Oracle特有的这个sql来插入数据,返回主键,让Hibernate知道主键的值,不过Hibernate目前并不能够支持这个sql语句,如果要让Hibernate支持这个sql,需要对源代码做相当大的改动。看看以后会不会加吧。
这个问题我不是第一次和别人讨论了,确实没有好的解决办法,除非对Hibernate进行大面积修改。但是话说回来,我用Oracle那么多年
了,从来都不使用trigger实现Auto
increment字段,我个人认为这种方式不好。本来Oracle已经把sequence从字段里面解放出来了,你还要在把它放回去。不用
trigger一样可以生成主键,看两个例子:
插入单条数据:
Java代码
insert table_name(id, name,...); values(sequ.nextval, ....);;
批量插入数据:
Java代码
insert table_name(id, name,...); select sequ.nextval, name,... from table2_name;
richart write:
这么做的话,最好是用一下nvl()函数(oracle自带),而且只能改动oracle相关的一个类。如果使用的是别的数据库,不知道有没有相似的问题存在?
robbin write:
oldma 写道
呵呵,谁能给解释一下?
看下面的PL/SQL:
Java代码
create trigger y before insert on bob
for each row
when (new.a is null);
begin
select x.nextval into :new.a from dual;
end;
用trigger来读sequence,插入表的主键字段,模拟SQL Server中的Auto Increment 字段
capitain write:
那oracle还有什么标准的办法实现Auto Increment 字段? 我们目前的程序插入的时候是按照auto increment字段来的, 就是不写id那个字段, 让数据库操作, 请问其他办法可以适用吗?
mikeho write:
是的,oracle是不必再写sp了,我们以前是在SQL server里面写了个sp来生成seq,没有用自增长,因为自增长在方法调用后返回id比较麻烦。现在都使用模拟UUID了(只有50位,理论上有重复建的危险,呵呵)。
作者:robbin 发表时间:2003-09-16
用Oracle特有的这个sql来插入数据,返回主键,让Hibernate知道主键的值,不过Hibernate目前并不能够支持这个sql语句,如果要让Hibernate支持这个sql,需要对源代码做相当大的改动。看看以后会不会加吧。
这个问题我不是第一次和别人讨论了,确实没有好的解决办法,除非对Hibernate进行大面积修改。但是话说回来,我用Oracle那么多年
了,从来都不使用trigger实现Auto
increment字段,我个人认为这种方式不好。本来Oracle已经把sequence从字段里面解放出来了,你还要在把它放回去。不用
trigger一样可以生成主键,看两个例子:
插入单条数据:
Java代码
insert table_name(id, name,...); values(sequ.nextval, ....);;
批量插入数据:
Java代码
insert table_name(id, name,...); select sequ.nextval, name,... from table2_name;
richart write:
这么做的话,最好是用一下nvl()函数(oracle自带),而且只能改动oracle相关的一个类。如果使用的是别的数据库,不知道有没有相似的问题存在?
robbin write:
oldma 写道
呵呵,谁能给解释一下?
看下面的PL/SQL:
Java代码
create trigger y before insert on bob
for each row
when (new.a is null);
begin
select x.nextval into :new.a from dual;
end;
用trigger来读sequence,插入表的主键字段,模拟SQL Server中的Auto Increment 字段
capitain write:
那oracle还有什么标准的办法实现Auto Increment 字段? 我们目前的程序插入的时候是按照auto increment字段来的, 就是不写id那个字段, 让数据库操作, 请问其他办法可以适用吗?
mikeho write:
是的,oracle是不必再写sp了,我们以前是在SQL server里面写了个sp来生成seq,没有用自增长,因为自增长在方法调用后返回id比较麻烦。现在都使用模拟UUID了(只有50位,理论上有重复建的危险,呵呵)。
作者:robbin 发表时间:2003-09-16
相关文章推荐
- 用oracle的trigger生成主键的时候和hibernate冲突的讨论
- hibernate 配置Oracle主键生成策略
- hibernate操作数据库遇到问题的时候检查主键生成策略
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- Hibernate面试题 --- Hibernate主键的生成策略(Oracle数据运用那种主键生成策略)
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence .
- Hibernate与Oracle应用之主键生成
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- 基于Oracle,采用JDBC、Hibernate不同方式实现自定义序列主键生成
- Oracle: hibernate 的主键生成策略
- Oracle: hibernate 的主键生成策略
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- hibernate连接oracle,主键自动生成
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- hibernate自定义主键生成策略2---关于Configurable接口继承和PersistentIdentifierGenerator常量的测试
- Hibernate中id的table生成策略之联合主键
- 琪露诺也能看懂的Oracle 主键值的序列自动生成与分配
- Hibernate主键生成机制
- Hibernate主键生成策略