浏览 108 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-08-09
记录在oracle表中主键是用trigger生成如下
CREATE OR REPLACE TRIGGER bi_auto BEFORE insert on autos for each row begin if :NEW."autoID" is null then select "autoID_SEQ".nextval into :NEW."autoID" from dual; end if; end; 请问在 hibernate hbm文件中怎样对autoID 定义??? 在hibernate的文档中 如下 5.1.4.6. 触发器实现的主键生成器(Primary keys assigned by triggers) 仅仅用于遗留的schema中 (Hibernate不能使用触发器生成DDL)。 <id name="id" type="long" column="person_id"> <generator class="select"> <param name="key">socialSecurityNumber</param> </generator> </id> 在上面的例子中,类定义了一个命名为socialSecurityNumber的唯一值属性, 它是 一个自然键(natural key),命名为person_id的代理键(surrogate key) 的值 由触发器生成。 ================================= 不知道socialSecurityNumber到底是指啥, 既然id是触发器生成 ,,干吗要socialSecurityNumber呢 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-08-09
因为你的触发器实际上还是从sequence取得值来作为主键的,你完全可以配置Hibernate直接使用sequence类型的generator
|
|
| 返回顶楼 | |
|
最后更新时间:2008-08-09
谢谢,这个是可以用sequence, 但是如果用触发器该怎么办呢,因为有几张表的主键是用sequence在加函数生成的, 所以多问一句。
movingboy 写道 因为你的触发器实际上还是从sequence取得值来作为主键的,你完全可以配置Hibernate直接使用sequence类型的generator
|
|
| 返回顶楼 | |
|
最后更新时间:2008-08-09
那你只能用select类型的generator了。以你的例子为例,你指定了名为socialSecurityNumber的属性作为自然键(也就是我们通常说的业务键,可以从业务上唯一地识别一条记录),Hibernate在新增记录后会执行一条类似如下的语句取得主键值:
select person_id from ... where social_security_number = ... 不过在Hibernate的源码中说明了,使用这种类型的generator不支持包含多个字段的自然键 |
|
| 返回顶楼 | |




