Статическая или динамическая загрузка не работает с Grails и Mongo - PullRequest
0 голосов
/ 12 января 2019

Я изучаю Grails версии 3.3.9 с Gorm для MongoDB. Моя цель - освоить режим выборки как статически (устанавливается в классах домена), так и динамически (устанавливается при вызове запроса). После двух дней попыток я не могу понять, как это сделать.

Я создал простой домен: водитель, у которого есть машина:

class Driver {
    String name
    static hasOne = [car: Car]
}

class Car {
    String title
    static belongsTo = [driver: Driver]
}

Я хочу получить машину, как статически, так и динамически.

Для статической выборки я пробовал:

  1. установите значение lazy в false, используя отображение класса Driver: статическое отображение = { автомобиль ленивый: ложь }

  2. установить выборку для присоединения с использованием сопоставления в классе Driver: статическое отображение = { выбор автомобиля: присоединиться }

  3. установить 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?

Заранее спасибо за помощь

...