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

| 我有一个表,其中一个列为布尔型,我需要按投影在另一列上使用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方法中获取。     

要回复问题请先登录注册