如何解决需要在休眠状态下聚合布尔型列值
| 我有一个表,其中一个列为布尔型,我需要按投影在另一列上使用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方法中获取。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。