0

我正在尝试使用java + spring + hibernate + jasper报告打印一些按国家分组的城市列表,但是在填充城市分组列表时遇到了一些问题......

我有以下查询:

Query query = session.createQuery("SELECT city FROM DictionaryCity city JOIN city.country as country GROUP BY country ORDER BY country.name ASC");

这总是返回一个城市列表,但具有 1x1 连接,但DictionaryCity类定义如下:

@Entity
@Table(name = "dictionarycities")
public class DictionaryCity implements IDictionary {
    /**
     * 
     */
    private static final long serialVersionUID = 3638441397996216204L;

    /**
     * 
     */
    @Id
    @Column(name = "Id")
    @GeneratedValue
    private Long id = null;

    /**
     * 
     */
    @Column(name = "Name")
    private String name;

    /**
     * 
     */
    @ManyToOne(targetEntity = DictionaryCountry.class)
    @JoinColumn(name = "CountryId")
    private DictionaryCountry country; /** other... **/ }

怎么了?谢谢

4

1 回答 1

1

group by 与返回分组在一起的相似行没有任何关系。当 select 子句使用 sum、min、max、count 等聚合函数时使用。

例如,查询

select country.id, sum(city.id) from Country country left join country.cities city

返回每个国家/地区以及该国家/地区包含的城市数量。

如果您只想按国家/地区划分城市组,order by您只需要:

select city FROM DictionaryCity city JOIN city.country as country order by country.name ASC

将返回所有城市,您将首先找到阿塞拜疆的城市,然后是比利时的城市,然后是加拿大的城市,等等。

于 2013-07-16T10:31:35.257 回答