需要在休眠状态下聚合布尔型列值

问题描述

| 我有一个表,其中一个列为布尔型,我需要按投影在另一列上使用group。现在,我希望选择列表中的所有列。所以我需要在所有列上使用聚合函数。 如果是布尔型列,应该使用什么?     

解决方法

        Hibernate中的聚合通过SQL中的聚合直接映射到相应的组,因此答案取决于如果您直接在SQL中编写查询,则将对布尔列应用哪个SQL聚合函数。 Projections类中的基本聚合函数通常本质上是数字的。您可以使用count,但这仅可以计算组中有多少行具有非null值,这似乎不太有用。我所知道的所有聚合函数都不会产生布尔值,因此您可能必须执行一些自定义操作。 通过扩展AggregateProjection类,您可以提供用于投影的自定义SQL子句。通常,这将用于访问特定于平台的聚合功能(例如STDDEV_POP),但是您可以提供可在SQL查询中使用的任何有效SQL片段。例如,如果您要实现逻辑OR(如果组中的任何行具有true值,则为true),则可以使用类似
if(sum(if(boolean_column,1,0))>0,true,false)
作为toSqlString方法为您的自定义投影返回的值。然后,您将以与使用Projections类中的任何标准选项相同的方式使用此自定义类。 此类的实现有些棘手,因为您必须确保在字符串中使用的值是正确的Hibernate列别名,该别名很容易从AggregateProjection的受保护的getColumnAlias方法中获取。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...