Родительский элемент Grails createCriteria с последним дочерним элементом

Как я могу прочитать только lastChild вместе с parentObject

Parent {
  hasMany[children: Child]
}

вот мой код

Parent.withCriteria() {
        eq("active", true)
        children {
            order("dateCreated", "desc")
            maxResults(1)
        }
    }

Но не работает. Как я могу прочитать Parent с последним обновленным дочерним элементом


person JayKay    schedule 08.01.2020    source источник


Ответы (1)


hasMany в GORM/Hibernate НЕ имеет семантики фильтра и всегда возвращает все объекты, на которые есть ссылки.

В прямом случае вам нужно запустить 2 запроса: найти все Parents и найти всех последних обновленных дочерних элементов.

Другим вариантом было бы изменить логику поиска: сначала найти детей, сгруппировать их по lastUpdated, а затем вытащить их родителей. Конечно, у вас должна быть обратная ссылка от ребенка к родителю:

class Child {
  static belongsTo = [ parent:Parent ]
}

Тогда запрос может выглядеть примерно так:

Child.withCriteria{
  projections{
    groupProperty 'id'
    max 'lastUpdated'
  }
  parent{
    eq "active", true
  }
}
person injecteer    schedule 08.01.2020
comment
Есть ли возможность добавить порядок в hasMany? как ребенок {заказ lastUpdated} - person JayKay; 09.01.2020
comment
да gorm.grails.org/latest/hibernate/manual/ - person injecteer; 09.01.2020