Hibernate Grails GORM-在父级之前保存子级

Hibernate Grails GORM-在父级之前保存子级,hibernate,grails,orm,parent-child,one-to-many,Hibernate,Grails,Orm,Parent Child,One To Many,我有几个类具有子-父关系,但是,当试图保存Grails GORM首先保存子对象的所有内容时,会引发以下错误: ORA-02291: integrity constraint violated - parent key not found 下面是我的类的基本代码表示: class Request { // Mapping definitions static mapping = { table(name: 'FORMS_REQUEST') tablePerHierarch

我有几个类具有子-父关系,但是,当试图保存Grails GORM首先保存子对象的所有内容时,会引发以下错误:

ORA-02291: integrity constraint violated - parent key not found
下面是我的类的基本代码表示:

class Request
{
  // Mapping definitions
  static mapping = {
    table(name: 'FORMS_REQUEST')
    tablePerHierarchy(false)
    id(length: 20, precision: 20, scale: 0, generator: 'sequence', params: [sequence: 'FORMS_REQUEST_SEQ'])       
  }

  // Properties
  Timestamp version
  Form form
  Date submittedTime
}




使用正确的数据等创建所有类并调用以下命令后:

request.save(flush: true)
我得到了上面提到的错误。日志显示Hibernate执行的以下SQL语句:

Hibernate: select FORMS_REQUEST_SEQ.nextval from dual
Hibernate: select FORMS_FORM_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: insert into FORMS_ACCESS_FORM_AD (version, checked, DN, type, access_form_id, ad_groups_idx, id) values (?, ?, ?, ?, ?, ?, ?)
Sep. 02 2014 @ 03:58:06 PM - class spi.SqlExceptionHelper - ORA-02291: integrity constraint (FK_954TU4QUPD4QE7H72XGVXSTKV) violated - parent key not found

它首先在父对象之前保存子对象,这可以解释错误,但是,我不知道为什么(GORM这么做似乎很愚蠢),我也不知道如何更改GORM的(Hibernate的)首先保存父类的行为。

问题在于您的
请求
域类正在对相关的
表单
使用简单的属性分配

因此,您需要使用
static hasOne=[Form:Form]
来定义这种关系,而不是
formform-Form


原因是GORM通过使用诸如
hasOne
hasMany
之类的东西来确定关系,并且反过来可以确定需要插入的东西的顺序。

问题在于您的
请求
域类正在对相关的
表单使用简单的属性赋值

因此,您需要使用
static hasOne=[Form:Form]
来定义这种关系,而不是
formform-Form


原因是GORM通过使用诸如
hasOne
hasMany
之类的东西来确定关系,并且反过来可以确定需要插入的东西的顺序。

问题在于您的
请求
域类正在对相关的
表单使用简单的属性赋值

因此,您需要使用
static hasOne=[Form:Form]
来定义这种关系,而不是
formform-Form


原因是GORM通过使用诸如
hasOne
hasMany
之类的东西来确定关系,并且反过来可以确定需要插入的东西的顺序。

问题在于您的
请求
域类正在对相关的
表单使用简单的属性赋值

因此,您需要使用
static hasOne=[Form:Form]
来定义这种关系,而不是
formform-Form


原因是GORM通过使用诸如
hasOne
hasMany
之类的东西来确定关系,并且反过来可以确定需要插入的东西的顺序。

我猜这是因为您的顶级请求使用的是
formform
而不是
static hasOne=[Form:Form]
。。。这就解决了问题。我不认为这是必需的(因为当您想要更改具有外键的表时,只有一对一关系才需要这样做)。我猜这是因为您的顶级请求使用的是
Form-Form
而不是
static-hasOne=[Form:Form]
。有趣的。。。这就解决了问题。我不认为这是必需的(因为当您想要更改具有外键的表时,只有一对一关系才需要这样做)。我猜这是因为您的顶级请求使用的是
Form-Form
而不是
static-hasOne=[Form:Form]
。有趣的。。。这就解决了问题。我不认为这是必需的(因为当您想要更改具有外键的表时,只有一对一关系才需要这样做)。我猜这是因为您的顶级请求使用的是
Form-Form
而不是
static-hasOne=[Form:Form]
。有趣的。。。这就解决了问题。我不认为这是必需的(因为当您想要更改具有外键的表时,只有一对一关系才需要这样做)。
class AccessFormAD
{
  // Mapping definitions
  static mapping = {
    table(name: 'FORMS_ACCESS_FORM_AD')
    id(length: 20, precision: 20, scale: 0, generator: 'sequence', params: [sequence: 'FORMS_ACCESS_FORM_AD_SEQ'])
  }

  // Relationship definitions
  static belongsTo = [accessForm: AccessForm]

  // Properties
  Timestamp version
}
class AccessFormPrinter
{
  // Mapping definitions
  static mapping = {
    table(name: 'FORMS_ACCESS_FORM_PRINTER')
    id(length: 20, precision: 20, scale: 0, generator: 'sequence', params: [sequence: 'FORMS_ACCESS_FORM_PRINTER_SEQ'])
  }

  // Relationship definitions
  static belongsTo = [accessForm: AccessForm]

  // Properties
  Timestamp version
}
request.save(flush: true)
Hibernate: select FORMS_REQUEST_SEQ.nextval from dual
Hibernate: select FORMS_FORM_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: select FORMS_ACCESS_FORM_AD_SEQ.nextval from dual
Hibernate: insert into FORMS_ACCESS_FORM_AD (version, checked, DN, type, access_form_id, ad_groups_idx, id) values (?, ?, ?, ?, ?, ?, ?)
Sep. 02 2014 @ 03:58:06 PM - class spi.SqlExceptionHelper - ORA-02291: integrity constraint (FK_954TU4QUPD4QE7H72XGVXSTKV) violated - parent key not found