У меня возникают некоторые проблемы с установочным отношением между двумя классами. У меня есть 2 классов, студент:Как установить правильное отношение между двумя классами
class Student {
String name
Guardian father
Guardian mother
Guardian local_guardian
}
и Guardian:
class Guardian {
String name;
static hasMany = [children:Student]
static mappedBy = [children:'father']
}
Здесь я использовал mappedBy для отображения объекта Гардиан отцу собственности. Если mappedBy, я получал сообщение об ошибке, должен использовать mappedBy с любым из трех свойств класса Student. Я попробовал этот запрос, чтобы ввести некоторые выборочные данные
new Student(name:"John", father: new Guardian(name:"Michael").save(),
mother: new Guardian(name:"Mary").save(),
local_guardian: new Guardian(name:"James").save()).save(flush:true);
Данные получать успешно сохранен, но моя проблема, так как я использовал mappedBy со свойством «отца», я могу использовать Guardian.children только с этим отцом объект. , когда я пытаюсь получить список детей с объектами mother и local_guardian, (напр .: mother.children) получает нулевой результат. Я попытался, добавив с AddTo на многих сторонах как
Guardian.findByName("Mary").addToChildren(
Student.findByName("John")).save(flush:true);
и попытался доступ
Guardian.findByName("Mary").children
Здесь я получил результат, но он переехал ребенок от отца к матери объекту, и больше не доступ к father.children
Как я могу решить этот сценарий? То, что я пытаюсь достичь, я должен иметь возможность получить список детей из всех трех объектов Guardian. Здесь один объект Student указывает на 3 объекта Guardian (отец, мать, local_guardian). Так что я должен быть в состоянии получить список детей,
- father.children
- mother.children
- local_guard.children
Как я правильно установить соотношение между этими классами в решить мою проблему?
Я пробовал это, почти получил работу, но когда я пытаюсь вызвать 'addToChildrens' на объект Guardian, я получаю сообщение об ошибке 'Нет подписи метода: java.util.ArrayList.addToChildrens() применим для типов аргументов: (studenttest.Student) значения: [studenttest.Student: 1]' – dev
проверить объект, на который вы вызываете метод addToChildrens, его не объект-хранитель, но ArrayList. не используйте def, используйте реальные типы для объявления переменных, и вы увидите, что пойдет не так. –
Отлично! Я получил его работу. Я использовал 'findAllBy', который возвращает' List'. Теперь он изменился на 'findBy' и начал работать. Но есть еще одна проблема. Мне пришлось использовать 'def addToChildrens (Student child)' вместо 'void addToChildrens (Student child)'. когда я использую void, получая ошибку компиляции. Какая может быть причина? – dev