使用Spring Hibernate Sessionfactory进行选择性去重

3
这是我的查询语句:
SELECT DISTINCT name FROM city;

这是我目前的代码:

public List<City> listCities() {
    return sessionFactory.getCurrentSession().createQuery("from City").list();
}

这意味着:

SELECT * FROM city;

我该如何更改代码,使查询正确?

希望我提供的信息足够,如有问题请随时提问。


请参见https://dev59.com/3nVC5IYBdhLWcg3wihmv。 - erac
@erac:它没有使用Spring或SessionFactory。 - Jaanus
1个回答

1

只需编写以下HQL:
sessionFactory.getCurrentSession().createQuery("select distinct from City").list()
或者更好的方式(使用结果转换器):

Query q = sessionFactory.getCurrentSession().createQuery("from City");
q.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

1
看起来很合理,但我不是也必须包括我想查询的字段名称作为“DISTINCT”吗?就像这样:SELECT DISTINCT column_name(s) FROM table_name - Jaanus
如果采用第二种解决方案,返回类型将是什么? - Jaanus
SELECT DISTINCT 不遵循 SQL 指南,但遵循 HQL 指南 - 这意味着,区分是通过 id 完成的。第二种解决方案的返回类型是您的 City 实体。在大多数情况下,我认为第二种方法更好。 - Bivas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接