Grails createCriteria родитель с последним ребенком - PullRequest
0 голосов
/ 08 января 2020

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

Parent {
  hasMany[children: Child]
}

Вот мой код

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

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

1 Ответ

1 голос
/ 08 января 2020

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

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

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

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

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

Child.withCriteria{
  projections{
    groupProperty 'id'
    max 'lastUpdated'
  }
  parent{
    eq "active", true
  }
}
...