У меня есть объект Foo, который имеет двунаправленную связь один-к-одному с баром, а другой - с Baz. Когда я пытаюсь сделать .load с помощью Foo и давать только Bar, я получаю исключения ссылочной целостности, жалующиеся на отсутствие Baz.Исправления для плагинов Исходные ссылочные исключения целостности в Grails
Должно ли это быть так? В реальной среде не возможно, что в базе данных не было бы соответствующего объекта Baz?
Я попытался вручную установить baz: null в закрытии загрузки светильников, но я все равно получаю то же самое. На стороне примечания, когда я только устанавливаю свойства (например, простую строку), все работает нормально. Только когда я начинаю устанавливать отношения.
Это с Grails 2.2.4, Fixtures 1.2 и без установленного плагина build-test-data.
EDIT: У меня есть ограничения, указывающие, что Baz является нулевым и уникальным. Просто для хихиканья я попробовал добавить ограничение blank
, но не повезло.
static constraints = {
baz nullable:true, unique: true, blank: true
}
РЕДАКТИРОВАТЬ 2: Вот это упрощенная версия кода:
class Foo {
String someValue1
String someValue2
String whatever
Bar bar
Baz baz
static mapping = {
id composite: ['someValue1', 'someValue2'], generator: 'assigned'
columns {
bar([:]) { column name: 'some_other_value' }
baz ([insertable:false, updateable: false]) {
column name: 'some_value_1'
column name: 'some_value_2'
}
}
version: false
static constraints = {
//there are no constraints for Bar
baz nullable:true, unique:true
}
}
class Bar {
String someOtherValue
static hasMany = [foos:Foo]
static mapping = {
id generator:'assigned', name:'someOtherValue'
}
}
class Baz {
String someValue1
String someValue2
String asdf
static mapping = {
id composite: ['some_value_1', 'some_value_2']
version false
}
}
class MyTest {
def fixtureLoader
@Before
void setup() {
fixureLoader.load {
myBar(Bar, someOtherValue:"shibby")
myFoo(Foo, someValue1:"test", someValue2:"test2", bar:myBar)
//i also tried this
//myFoo(Foo, someValue1:"test", someValue2:"test2", bar:myBar, baz:null)
}
}
}
Вот часть, за исключением:
Вызванный: org.h2.jdbc. JdbcBatchUpdateException: ссылочная целостность нарушение ограничений: «FK190E74B120F4F2BC: MYSCHEMA.FOO FOREIGN KEY (SOME_VALUE_1, SOME_VALUE_2) ССЫЛКИ МОЙ SCHEMA.BAZ (SOME_VALUE_1, SOME_VALUE_2) "; SQL заявление: (?????,,,,, ,) вставить в MYSCHEMA.foo (независимо от того, some_other_value, some_value_2, some_value_1) значения [23506-164]
EDIT: Извините, я опечалился раньше. Бар имеет много-к-одному отношения с Foo.
Можете ли вы опубликовать простой пример неудачи? Доменные классы и светильники помогут –
Хорошо, я только что разместил его. –
У вас есть ID-строка, установленная на 'generator: 'assign'', но я не вижу, чтобы значение id было задано где угодно. Является ли это причиной того, что Bar не удалось сохранить, что затем приведет к ограничению ссылочной целостности при переходе к сохранению Foo? – proflux