Как отобразить две таблицы и не вносить никаких изменений при отображении устаревших таблиц базы данных в 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 варианта в зависимости от вашего варианта использования:
- удалить значения, уже содержащиеся в таблице (может быть, не хотел)
- Зайдите в ваш инструмент управления БД и установите внешний ключ для этих строк, а затем перезапустите сервер. Ошибка должна исчезнуть
- установите ограничение для вашей страховой ссылки (ownTo) в вашем объекте "InsurancePackage", чтобы быть обнуляемым:true