问一个关于hibernate的OracleDialect问题

    
yyanghhong
03-09-10 19 950

对于id的自动生成, OracleDialect提供了sequence的方法, 它是直接调sequence来插入ID的.
但一般做法都是用trigger来调sequence插入ID, 这种方法即安全又灵活,
不知OracleDialect怎样处理这种情况

hailwind
2003-09-10 23:39

好像没处理耶,呵呵

看看源码就清楚了~~~

robbin
2003-09-11 00:16

原因很简单,因为session.save()一定要返回主键类对象。

你就算用trigger来读sequence生成主键字段,Hibernate还是要多调用一次SQL:select id from ...;
来获取id字段值构造主键类对象返回。

而不用trigger,也有一次SQL:select nextval from sequ来创建主键类

反正都得用两条SQL,区别也不大,你用trigger,对于Hibernate来说,反而更加麻烦,还需要用户去写trigger,索性不用。





yyanghhong
2003-09-11 00:26

oracle 的insert, update 有returning into clause, 不用两条sql.
trigger和returing结合是oracle的推荐方法
Insert into table_a
(value1, value2)
Select value1, value2
From table_b
Returning table_a_id
into :table_a_local;

yyanghhong
2003-09-11 00:28

上面的不对
Insert into table_a
(value1, value2)
Returning table_a_id
into :table_a_local;

4Go 1 2 3 4 下一页