首页 > 解决方案 > 如何在 JPA 中选择一列并按此列分组?

问题描述

我需要做某事

select city from users group by city;

如何使用 Spring JPA 执行此操作?也许规格?根据传递的参数选择类似的东西呢?

List<Object> getValuesGroupedBy(String columnName);

我尝试使用规范,你只能这样做

query.groupBy(root.get(column));

这确实按指定的列分组。

但是当您尝试进行选择时

query.select(root.get(column)).groupBy(root.get(column))

它做某事不真实。

或者,我也尝试过使用 Projections。我说好吧,我需要城市

interface OnlyCity {
   String getCity();
}

然后我的 JPA 如下所示:

List<OnlyCity> findAllBy();

而且这只选择了一列,这也可以。但是如何把规范放在那里,所以我至少可以执行我上面描述的操作?

标签: javaspringhibernatespring-boot

解决方案


您可以使用 JPA 使用类似的东西。当然,我的代码是为 Ejb 设计的,但主要概念是相同的。

@Entity
@Table
@NamedQuery(name="groupBy",query="SELECT c.city from City c group by c.city")
class City{
            String city;
            ....
            ....
        }



class CityManager{
            @PersistenceContext
            EntityManager manager

            public List<String> groupBycity()
            {
                return manager.createNamedQuery("groupBy").getResultList();
            }
        }

推荐阅读