Источники данных Grails «Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено» - PullRequest
0 голосов
/ 31 марта 2012

Я использую плагин Grails Datasources в своем приложении, и у меня возникают проблемы с сохранением класса домена (chidl), ссылающегося на класс только для чтения (родительский). Например:

/* Parent domain class; a read-only datasource using the Datasources plugin */
class Parent {
  //...Some fields
}

/* Child domain class, referencing the parent class */
class Child
  // Some fields
  static hasOne = [parent:Parent]
}

Когда я пытаюсь сохранить свой дочерний класс, я получаю эту ошибку

Cannot add or update a child row: a foreign key constraint fails 
(`foo`.`child`, CONSTRAINT `FK38A5EE5F707D1A2B` 
FOREIGN KEY (`id`) REFERENCES `parent` (`id`))

Я заметил, что Grails создает локальную пустую копию таблицы, на которую ссылаются, из (100%) * (только для чтения) в мою локальную (доступную для записи) datasource B при создании таблиц при запуске. Может ли он ссылаться на эту таблицу (и ее недавно созданный FK) вместо этого? Если да, то почему он не применяет ограничение FK для фактического источника данных (т.е. в datasource A)?

Я довольно новичок в Grails и не смог найти решения этой конкретной проблемы где-либо еще, так что извините, если это звучит глупо

1 Ответ

1 голос
/ 31 марта 2012

Плагин не поддерживает такие отношения между базами данных. GORM, вероятно, не знает, что другой класс домена находится в другой базе данных.

Способ обойти эту ошибку - сохранить ссылку на родительскую строку, что-то вроде:

class Child{
      long parentId      
      Parent getParent(){
           Parent.get( parentId )
      }
}

Смотрите это: http://markmail.org/message/omllq46sn3d2l6ah

...