Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 让GORM/Hibernate使用设置主键的触发器的方法_Oracle_Hibernate_Grails_Gorm - Fatal编程技术网

Oracle 让GORM/Hibernate使用设置主键的触发器的方法

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; 对于这个数据库,我们还有其他依赖于这种方法的应用程序 我希望能够在我的域对

我有一个现有的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;
对于这个数据库,我们还有其他依赖于这种方法的应用程序

我希望能够在我的域对象中的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'
    }