Я изучаю Grails версии 3.3.9 с Gorm для MongoDB.
Моя цель - освоить режим выборки как статически (устанавливается в классах домена), так и динамически (устанавливается при вызове запроса). После двух дней попыток я не могу понять, как это сделать.
Я создал простой домен: водитель, у которого есть машина:
class Driver {
String name
static hasOne = [car: Car]
}
class Car {
String title
static belongsTo = [driver: Driver]
}
Я хочу получить машину, как статически, так и динамически.
Для статической выборки я пробовал:
установите значение lazy в false, используя отображение класса Driver:
статическое отображение = {
автомобиль ленивый: ложь
}
установить выборку для присоединения с использованием сопоставления в классе Driver:
статическое отображение = {
выбор автомобиля: присоединиться
}
установить fetchMode на eager в классе Driver:
static fetchMode = [car: "eager"]
Ничего из этого не работает: я создал запись об автомобиле и водитель с этим автомобилем связан через команды post автоматически сгенерированных контроллеров. Это необработанные объекты базы данных:
Машина:
{
"_id" : NumberLong(2),
"title" : "ferrari",
"driver" : NumberLong(2),
"version" : NumberLong(0)
}
и драйвер:
{
"_id" : NumberLong(2),
"name" : "John",
"version" : NumberLong(0)
}
Когда я выполняю get from rest, я получаю следующий вывод для всех трех попыток, которые я пробовал:
{
"id": 2,
"name": "John",
"car": {
"id": 2
}
}
Почему автомобильная часть водителя показывает только идентификатор, а не полные данные автомобиля? Я действительно не могу понять.
По поводу динамического извлечения (я хочу, чтобы мощный мог решить, следует ли включать eagerfetching или нет на основе запроса, который мне нужно сделать), я попытался указать fetchMode в закрытии withCriteria:
Driver.withCriteria {
fetchMode "car", FetchMode.JOIN
}
... но я получаю исключение, которое говорит, что критерий fetchMode не существует:
Нет такого свойства: FetchMode для класса: org.grails.datastore.gorm.mongo.MongoCriteriaBuilder
Как мне выполнить статическую и динамическую выборку с помощью Grails и MongoDB?
Заранее спасибо за помощь