Как отобразить две таблицы и не вносить никаких изменений при отображении устаревших таблиц базы данных в Grails?

Я новичок в Grails и картировании, и у меня есть кое-что, что похоже на это. У меня есть два класса домена, и мне нужно установить между ними связь, и когда связь установится, в существующие таблицы из моей базы данных 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, но это не определено в классах, и они пытаются изменить мои таблицы, и я не хочу, чтобы это произошло.

1 ответ

Вы создали новый столбец в таблице insurance_package, который содержит внешний ключ к таблице страхования. (hasMany и serveTo -> one-to-many) Проблема в том, что столбец имеет ограничение NOT NULL по умолчанию, но в таблице уже есть данные.

Теперь вопрос: что делать с данными, уже содержащимися в таблице. Grails хочет установить ограничение NOT NULL, но не может, потому что там уже есть и потому что вы только что создали столбец, а значения равны NULL

У вас есть 3 варианта в зависимости от вашего варианта использования:

  1. удалить значения, уже содержащиеся в таблице (может быть, не хотел)
  2. Зайдите в ваш инструмент управления БД и установите внешний ключ для этих строк, а затем перезапустите сервер. Ошибка должна исчезнуть
  3. установите ограничение для вашей страховой ссылки (ownTo) в вашем объекте "InsurancePackage", чтобы быть обнуляемым:true
Другие вопросы по тегам