В моем текущем проекте я не могу продолжать отношения «один ко многим». Обе стороны отношений будут сохранены - просто отсутствует связь между ними.Не удается сохранить отношения «один ко многим»
Один-ко-многим между моими двумя доменами выглядит следующим образом:
class Parent {
String name
...
static hasMany = [childs: Child]
Parent() {}
Parent(SomeOtherClass obj) {
this.properties = obj.properties
}
}
class Child {
int code
String description
}
Я создаю мои Parent
экземпляры в ParentService
:
public Boolean createParents(List parentIds) {
boolean savedSuccessfully = true
Parent.withTransaction {status ->
parentIds.each { parentIdString ->
if (parentIdString && parentIdString.isInteger()) {
int parentId = parentIdString.toInteger()
def parentInstance = new Parent(someOtherService.getExternalParentObj(parentId))
someOtherService.getExternalChilds(parentId).each { entry ->
parentInstance.addToChilds(Child.findOrSaveWhere(code: entry.key, description: entry.value))
}
if(!parentInstance.save()) {
status.setRollbackOnly()
savedSuccessfully = false
}
}
}
}
return savedSuccessfully
}
И, в Parent
экземпляры и экземпляры Child
создаются и сохраняются успешно. Просто отсутствует связь между родителем и дочерним элементом. Свойство childs
каждого экземпляра Parent
- пустой список.
Я не знаю, что здесь не так. Почему отношения не будут сохраняться? Есть идеи?
Update
Я добавил интеграционный тест для ParentService
, чтобы проверить наличие childs
списка после создания всех Parent
экземпляров:
...
assert parentService.createParents(["123","234","356"]) == true
def parent = Parent.get(1)
assert parent.childs.size() > 0
...
Неожиданным - тест пройден.
Можете ли вы подтвердить, что Grails удалось правильно создать родительские, дочерние и родительские таблицы – uchamp
Да - все таблицы созданы правильно. Стол _parent_-table и _child_-table будут заполнены. Просто таблица соединений _parent_child_ пуста ... – aiolos
Каковы транзакционные свойства вашего ParentService и someOtherService? Вы пытались сохранить/сбросить родительский экземпляр до вызова другой службы (и добавления детей)? – codelark