Hibernate Grails GORM-在父级之前保存子级
我有几个类具有子-父关系,但是,当试图保存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
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