У меня есть объект Foo, который имеет двунаправленную связь один-к-одному с Bar, а другой - с Baz. Когда я пытаюсь сделать .load с помощью Foo и даю ему только Bar, я получаю исключения ссылочной целостности с жалобами на отсутствие Baz.
Так ли это на самом деле? Разве в реальной среде невозможно, чтобы в базе данных не было подходящего объекта Baz?
Я попытался вручную установить baz: null в закрытии загрузки фикстур, но все равно получаю то же самое. Кстати, когда я устанавливаю только свойства (например, простую строку), все работает нормально. Это только когда я начинаю устанавливать отношения.
Это с Grails 2.2.4, Fixtures 1.2 и без установленного плагина build-test-data.
ИЗМЕНИТЬ: у меня есть ограничения, в которых Baz должен иметь значение NULL и быть уникальным. Просто для смеха я попытался добавить ограничение 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) REFERENCES MYSCHEMA.BALUE_2; Оператор SQL: вставить в MYSCHEMA.foo (все, some_other_value, some_value_2, some_value_1) значения (?,?,?,?,?,?,?,?) [23506-164]
РЕДАКТИРОВАТЬ: извините, я оговорился ранее. Бар имеет отношения «многие к одному» с Фу.
generator:'assigned'
, но я нигде не вижу, чтобы значение id было установлено. Это приводит к тому, что Bar не может сохраниться, что затем вызовет ограничение ссылочной целостности при сохранении Foo? - person proflux   schedule 09.08.2013hasMany
делает в баре с двусторонней связью один-к-одному? - person dmahapatro   schedule 20.08.2013