我有一个comments
表,我想从中选择表,并按外键profile_id
对其进行分组。
我正在使用jpa 2 / hibernate,表格与profile
到comment
之间存在一对多的关系。
目前,sql查询返回一个注释列表,通过多对一关系,我得到每个注释的配置文件。
我很感激帮助回答有关帖子和预查询执行排序的以下内容:
List<Comment>
表的profile_id
(外键)或comments
(主键)对返回的注释列表(即id
)进行排序profile
表的哪一个?答案 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/