我希望使用“GROUP BY”编写一个条件查询,并希望返回所有列。
Plane SQL如下所示:
select * from Tab group by client_name order by creation_time;
我知道它将有count(distinct client_name)
行数。
我目前的查询似乎没有给出正确的结果,如下所示:
Criteria criteria = getSession(requestType).createCriteria(Tab.class);
criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("client_name")));
criteria.addOrder(Order.asc("creationTime"));
此查询仅返回"client_name"
。我不想手动放置所有列名。一定有办法,能做些什么呢?
4条答案
按热度按时间hivapdat1#
我想你一定是误会了。如果在SQL中使用
GROUP BY
,则需要按所有选定列进行分组。同样的道理也适用于Hibernate--如果您在Projection
中使用groupProperty
,那么您就是在告诉Hibernate该列是一个组列。如果没有引用其他列/字段,Hibernate将假定您不需要它们,因为它们也需要分组。退后一步:你想做什么?如果表中的所有列存在重复数据,则可能存在错误数据,或者持久化数据不正确。至少,你的钥匙会被弄乱。
pgky5nke2#
在Hibernate for Projects中,需要的所有列都需要添加到投影列表中。要获得Entity中的结果,我们必须使用setResultTransformer。选中下面的示例以在Hibernate中获取GROUP BY:
6mzjoqzu3#
当使用Hibernate投影时,您应该添加投影列表中需要的所有列。您只使用了Projections.projectionList().add(Projections.groupProperty(“client_name”))
这个。因此很明显,只返回CLIENT_NAME。
7hiiyaii4#
不可能通过使用基于单个列的组来获取数据库的所有列。相反,您可以根据需要使用GROUP BY子句和SELECT中的所有列。要在如下所示的休眠中获得结果