grails 3.3 gorm, где запрос с количеством проекций () отличается от list (). size () - PullRequest
0 голосов
/ 11 мая 2018

Согласно разделу 7.4 документации * Gorm 6 запрос Where возвращает DetachedCriteria, который предоставляет метод count(), который должен возвращать количество записей, возвращаемых запросом. На самом деле, насколько я могу судить, если dc является экземпляром DetachedCriteria, то

dc.count() == dc.list().size()

должно быть верным.

В случае запроса Where, содержащего проекцию, count(), кажется, возвращает что-то еще. В этом простом примере:

query = Runner.where {
    projections {
        groupProperty 'finishPosition'
        rowCount()
    }
}

println "query.count() ${query.count()}"
println "query.list().size() ${query.list().size()}"

напечатан результат:

query.count() 576
query.list().size() 22

Если я также печатаю query.list(), это выглядит как

query.list() [[14, 576], [12, 1945], [8, 5682], [17, 78], [1, 91842], [15, 174], [10, 3836], [11, 2873], [4, 90688], [18, 36], [0, 336177], [16, 110], [6, 63957], [19, 6], [2, 91669], [21, 2], [3, 91550], [20, 4], [13, 956], [5, 72852], [9, 4811], [7, 6238]]

, то есть list() и list.size() согласованы (и соответствуют запросу SQL в базовой базе данных).

У кого-нибудь есть идеи о том, почему count() кажется отключенным в этом случае? Интересно, что число, возвращаемое count() - 576, совпадает с проекцией rowCount() для первой возвращенной записи ...

Пока, думаю, я буду использовать query.list().size().

...