Необходимо агрегировать значение столбца логического типа в спящем режиме - PullRequest
3 голосов
/ 30 мая 2011

У меня есть таблица с одним из столбцов в качестве логического типа, и мне нужно использовать группу по проекции на другой столбец.Теперь я хочу, чтобы все столбцы в списке выбора.Поэтому мне нужно использовать статистическую функцию для всех столбцов.

Что следует использовать в случае столбца логического типа?

1 Ответ

0 голосов
/ 21 января 2013

Агрегаты в Hibernate сопоставляются напрямую с соответствующей группой с помощью агрегатов в SQL, поэтому ответ зависит от того, какую функцию агрегирования SQL вы примените к логическому столбцу, если бы вы писали запрос непосредственно в SQL.

Основные агрегирующие функции в классе Projection обычно имеют числовой характер.Вы можете использовать count, но это будет просто подсчитывать, сколько строк в группе имеет ненулевое значение, что кажется не очень полезным.Ни одна из известных мне функций агрегации не производит логических значений, поэтому вам, вероятно, придется делать что-то нестандартное.

Расширяя класс AggregateProjection, вы можете предоставить пользовательское предложение SQL, которое будет использоваться для проекции.Обычно это используется для предоставления доступа к функции агрегирования, которая зависит от платформы (например, STDDEV_POP), но вы можете указать любой допустимый фрагмент SQL, который вы можете использовать в запросе SQL.Например, если вы хотите реализовать логическое ИЛИ (true, если любая строка в группе имеет истинное значение), вы можете использовать что-то вроде

if(sum(if(boolean_column,1,0))>0,true,false)

в качестве значения, возвращаемого методом toSqlString для вашей пользовательской проекции,Затем вы будете использовать этот пользовательский класс так же, как и любой из стандартных параметров класса Projection.

Реализация этого класса немного сложна, так как вы должны убедиться, что значение, которое вы используете вstring - это правильный псевдоним столбца Hibernate, который достаточно легко получить из защищенных методов getColumnAlias ​​AggregateProjection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...