Агрегаты в 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.