如何在Grails中映射旧数据库表时映射两个表并且不进行任何更改?

时间:2015-07-16 11:49:26

标签: database postgresql grails mapping legacy-database

我是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我希望这发生。

1 个答案:

答案 0 :(得分:1)

您在insurance_package表中创建了一个新列,该列包含保险表的外键。 (hasMany和belongsTo - >一对多) 这里的问题是该列默认情况下具有NOT NULL约束,但该表似乎已包含数据。

现在的问题是:如何处理表中已包含的数据。 Grails想要设置NOT NULL约束,但不能,因为已经存在,因为你刚刚创建了列,值为NULL

根据您的使用情况,您有3个选项:

  1. 删除表中已包含的值(可能不需要)
  2. 进入数据库管理工具并为这些行设置外键,然后重新启动服务器。错误应该消失
  3. 将您的“InsurancePackage”对象中的保险参考(belongsTo)约束设置为可为空:true