如何分组选定的数据?

时间:2011-02-15 15:08:49

标签: java sql hibernate jpa

我有一个comments表,我想从中选择表,并按外键profile_id对其进行分组。

我正在使用jpa 2 / hibernate,表格与profilecomment之间存在一对多的关系。

目前,sql查询返回一个注释列表,通过多对一关系,我得到每个注释的配置文件。

我很感激帮助回答有关帖子和预查询执行排序的以下内容:

  1. 如何通过List<Comment>表的profile_id(外键)或comments(主键)对返回的注释列表(即id)进行排序profile表的哪一个?
  2. 如何构建我的SQL查询以按个人资料对评论进行排序?
  3. 两种中的哪一种 - 前或后分类 - 是一种更好的做法?

2 个答案:

答案 0 :(得分:1)

让数据库为您排序:它非常有效。

HQL非常简单:

select c from Comment c order by c.profile.id

答案 1 :(得分:1)

&#34;排序&#34; (post sort)将由java在内存中完成,而#34; order by&#34; (预排序)将由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>();

&#34; NATURAL&#34;在这种情况下,期望Comment类通过使用compareTo方法确保注释按profile_id排序。

如果您的Comments类实现了比较器,您还可以使用SortType.CoMPARATOR进行更多控制。

引用:Java Persistence with Hibernate 和http://henko.net/imperfection/sorted-collections-in-hibernate/