Java 如何对所选数据进行分组?
我有一个Java 如何对所选数据进行分组?,java,sql,hibernate,jpa,Java,Sql,Hibernate,Jpa,我有一个comments表,我想从中通过外键profile\u id对注释进行选择和分组 我使用的是JPA2/hibernate,表之间有一对多的关系,从profile到comment 目前,sql查询重新运行注释列表,并通过多对一关系获得每个注释的概要文件 请帮助我回答以下关于查询后和查询前执行排序的问题: 如何根据注释表的配置文件id(外键)或配置文件表的id(主键)对返回的注释列表进行排序 我应该如何构造sql查询以按配置文件对注释进行排序 两种排序方法中的哪一种——前排序还是后排序——是
comments
表,我想从中通过外键profile\u id
对注释进行选择和分组
我使用的是JPA2/hibernate,表之间有一对多的关系,从profile
到comment
目前,sql查询重新运行注释列表,并通过多对一关系获得每个注释的概要文件
请帮助我回答以下关于查询后和查询前执行排序的问题:
注释
表的配置文件id
(外键)或配置文件
表的id
(主键)对返回的注释列表进行排序让数据库为您排序:它非常高效 这方面的HQL非常简单:
select c from Comment c order by c.profile.id
“排序”(后排序)将由内存中的java完成,而“排序依据”(预排序)将由rdbms完成。在大多数情况下,让rdbms使用SQL来实现这一点更为有效。java排序将由排序对象的compareTo方法控制
SQL非常简单,只需向HQL添加order by子句,如下所示:
from Comments order by profile_ID
或者,使用注释,可以在映射中指定如何按以下方式排序:
@org.hibernate.annotations.OrderBy(
clause = "profile_id asc"
)
为了让结果在内存中按java排序,可以将注释集合映射为SortedMap或SortedSet
@org.hibernate.annotations.Sort(
type=org.hibernate.annotations.SortType.NATURAL
)
private SortedSet<Comment> comments = new TreeSet<Comment>();
@org.hibernate.annotations.Sort(
type=org.hibernate.annotations.SortType.NATURAL
)
private SortedSet comments=new TreeSet();
本例中的“NATURAL”要求Comment类通过使用compareTo方法确保按profile_id对注释进行排序
如果Comments类实现了CoMPARATOR,您还可以使用SortType.CoMPARATOR进行更多的控制
参考:使用Hibernate的Java持久性
及