0

私はGrailsとマッピングが初めてで、このようなものがあります。2 つのドメイン クラスがあり、それらの間の関係を作成する必要があります。関係が作成されると、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

したがって、2つのテーブルを接続できず、同じエラーが発生します。何らかの理由でGrailsがinsurance_idを見つけようとしていますが、それはクラスで定義されておらず、テーブルを変更しようとしています。

4

1 に答える 1

1

insurance_package テーブルに、insurance テーブルへの外部キーを保持する新しい列が作成されます。(hasMany および belongsTo --> 1 対多) ここでの問題は、列には既定で NOT NULL 制約があるが、テーブルには既にデータが含まれているように見えることです。

問題は、テーブルに既に含まれているデータをどうするかです。Grails は NOT NULL 制約を設定したいのですが、すでにそこにあり、列を作成したばかりで値が NULL であるため、できません。

ユースケースに応じて、次の 3 つのオプションがあります。

  1. テーブルに既に含まれている値を削除します(おそらく不要です)
  2. データベース管理ツールに移動し、それらの行の外部キーを設定してから、サーバーを再起動します。エラーが消えるはずです
  3. 「InsurancePackage」オブジェクトの保険参照 (belongsTo) の制約を nullable:true に設定します。
于 2015-07-16T15:22:43.390 に答える