Hibernate:分组依据

时间:2013-07-16 10:01:45

标签: hibernate hql

我正在尝试使用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... **/ }

有什么问题?谢谢

1 个答案:

答案 0 :(得分: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

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