我是Grails和mapping的新手,我有一些看起来像这样的东西。 我有两个域类,我需要在它们之间建立关系,并且当完成关系时,不会对我的PostgreSQL数据库中的现有表进行任何更改。
class Insurance{
Integer id
String osg_name
String osg_logo
String osg_email
String osg_link
static hasMany = [ insurancePackage: InsurancePackage]
static constraints = {
id(blank: false)
osg_name (blank: false, size: 0..155)
osg_logo (size: 0..155)
osg_email (blank: false, size: 0..100)
osg_link (size: 0..155)
}
static mapping = {
table name: "insurance", schema: "common"
version false
id generator :'identity', column :'osg_id', type:'integer'
}
}
class InsurancePackage{
Integer id
Integer osg_id
String osgp_comment
Integer tpo_id
String osgp_link
String osgp_label
//static belongsTo = Insurance
static belongsTo = [insurance: Insurance]
static constraints = {
id(blank: false)
osg_id (blank: false)
osgp_comment (blank: false, size: 0..500)
tpo_id (blank: false,)
osgp_link (blank: false, size: 0..155)
osgp_label (blank: false, size: 0..10)
}
static mapping = {
table name: "insurance_package", schema: 'common'
version false
id generator :'identity', column :'osgp_id', type:'integer'
}
}
这是我得到的错误
Error 2015-07-16 13:38:49,845 [localhost-startStop-1] ERROR hbm2ddl.SchemaUpdate - Unsuccessful: alter table revoco.insurance_package add column insurance_id int4 not null
| Error 2015-07-16 13:38:49,845 [localhost-startStop-1] ERROR hbm2ddl.SchemaUpdate - ERROR: column "insurance_id " contains null values
| Error 2015-07-16 13:38:49,845 [localhost-startStop-1] ERROR hbm2ddl.SchemaUpdate - Unsuccessful: alter table revoco.insurance_package add constraint FK684953517A89512C foreign key (insurance_id ) references revoco.insurance
| Error 2015-07-16 13:38:49,845 [localhost-startStop-1] ERROR hbm2ddl.SchemaUpdate - ERROR: column "insurance_id " referenced in foreign key constraint does not exist
所以我无法连接这两个表并且我得到了相同的错误,由于某种原因,Grails正在尝试查找insurance_id但是没有在课程中定义,他们正试图改变我的表格而且我没有&#39我希望这发生。
答案 0 :(得分:1)
您在insurance_package表中创建了一个新列,该列包含保险表的外键。 (hasMany和belongsTo - >一对多) 这里的问题是该列默认情况下具有NOT NULL约束,但该表似乎已包含数据。
现在的问题是:如何处理表中已包含的数据。 Grails想要设置NOT NULL约束,但不能,因为已经存在,因为你刚刚创建了列,值为NULL
根据您的使用情况,您有3个选项: