Oracle 让GORM/Hibernate使用设置主键的触发器的方法
我有一个现有的Oracle数据库,它通过触发器设置插入的主键Oracle 让GORM/Hibernate使用设置主键的触发器的方法,oracle,hibernate,grails,gorm,Oracle,Hibernate,Grails,Gorm,我有一个现有的Oracle数据库,它通过触发器设置插入的主键 TRIGGER SET_schedtemplate_id_template BEFORE INSERT ON schedtemplate FOR EACH ROW BEGIN SELECT schedtemplate_id_template_SEQ.NEXTVAL INTO :NEW.id_template FROM DUAL; END; 对于这个数据库,我们还有其他依赖于这种方法的应用程序 我希望能够在我的域对
TRIGGER SET_schedtemplate_id_template
BEFORE INSERT
ON schedtemplate
FOR EACH ROW
BEGIN
SELECT schedtemplate_id_template_SEQ.NEXTVAL
INTO :NEW.id_template
FROM DUAL;
END;
对于这个数据库,我们还有其他依赖于这种方法的应用程序
我希望能够在我的域对象中的GORM中映射此数据库
static mapping = {
autoTimestamp true
table 'schedtemplate'
version false
id column: 'id_template', generator: 'sequence', params: [sequence: 'SCHEDTEMPLATE_ID_TEMPLATE_SEQ']
}
这种方法的问题是GORM将序列增加到12,但在插入时,序列再次增加到13。这意味着对象图中的其他对象违反外键约束,因为它们使用GORM的12而不是触发器的13
似乎hibernate设置hibernate.jdbc.use_get_generated_keys=true就是为此而开发的
如何配置GORM/Grails以使用此设置?这里讨论了Hibernate中的触发器分配标识列 现在有一个问题,如何在GORM中配置它 尝试使用上述自定义标识生成器,如下所示:
static mapping = {
...
id column: 'id_template', generator: 'jpl.hibernate.util.TriggerAssignedIdentityGenerator'
}