Впервые здесь, и впервые в Grails, у меня странная проблема с отношениями один-ко-многим.
Я создаю приложение Grails для предоставления услуг веб-сайту и приложениям для смартфонов.
Я изо всех сил старался создать родительский сервис, который может обрабатывать общие действия (создавать, получать, изменять, перечислять, удалять...) от которого я могу наследовать более конкретные сервисы.
Проблема, с которой я сталкиваюсь, связана с действием списка.Я создаю запрос withCriteria из параметров, которые отправляют мне вызывающие.
У меня есть два домена:
class A {
static hasMany = [bs:B]
}
class B {
static belongsTo = [a:A]
}
Мне нужно перечислить объекты класса B, принадлежащие объекту A, мой универсальныйСписок действий генерирует это:
List objects = B.withCriteria() {
createAlias("A","A")
eq("A.id", myId)
}
Все работает нормально, но дело в том, что я создал общий метод toJSON (), который создает JSON-ответ из экземпляра домена.Для этого я перебираю список строк, который содержит имя свойств домена, которые я хочу добавить в свой ответ JSON.Затем я получаю к ним доступ следующим образом:
objects[0]."$propertyName"
Если мой объект содержит ссылки на другие объекты, я хочу добавить их идентификаторы в ответе JSON.
Эти идентификаторы могут быть доступны с использованием следующего синтаксиса:
objects[0].aId
Но эта чертова вещь ноль!Если я получу доступ к нему, выполнив:
objects[0].a.id
У меня есть правильный родительский идентификатор!
Я сделал несколько тестов, и если я не фильтрую объекты B по объекту A, то я могу получить доступродительский идентификатор, как я хочу это сделать, то есть:
List objects = B.withCriteria() {}
objects[0].aId
Есть идеи о том, что здесь происходит?
Спасибо.