问一个关于hibernate的OracleDialect问题

03-09-10 yyanghhong
对于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 下一页