首页新闻找找看学习计划

hql查询一个对象,对象中有一个属性Set集合,怎么让Set集合排序?

0
悬赏园豆:15 [已解决问题] 解决于 2016-11-20 08:30

hql查询essay文章表,评论表comment指向essay表。通过hql得到一篇文章,在jsp页面中通过foreach遍历${essay.comments}时,得到的评论列表是乱序的,每刷新一次它们的顺序就会变一次,而我想遍历时评论按照时间排序,要怎么办???

 

而我现在做法是查essay时,又查了一次comment,查了两次数据库。

关键 我现在的评论回复表reply指向comment,遍历时又是乱序,而且在查数据库的话效果就太差了,因为每个评论就要查一次,效率太低太低。

 

请问有什么好的办法???

爱因斯坦不爱物理的主页 爱因斯坦不爱物理 | 初学一级 | 园豆:7
提问于:2016-11-18 11:20
< >
分享
最佳答案
0

在Essay实体中将Set转化成List并排序能满足你的要求吗?? 应该比查询两次数据库高效点。

Essay实体如下:

 1 package yaolin.code;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.Comparator;
 6 import java.util.List;
 7 import java.util.Set;
 8 
 9 public class Essay {
10 
11     private long id;
12     // private String title;
13     // private String content;
14     private Set<Comment> listComment;
15 
16     public long getId() {
17         return id;
18     }
19 
20     public void setId(long id) {
21         this.id = id;
22     }
23 
24     public Set<Comment> getListComment() {
25         return listComment;
26     }
27 
28     public void setListComment(Set<Comment> listComment) {
29         this.listComment = listComment;
30     }
31 
32     // ${essay.comments}
33     public List<Comment> getComments() {
34         List<Comment> comments = new ArrayList<Comment>();
35         if (listComment != null) {
36             comments.addAll(listComment);
37         }
38         Collections.sort(comments, new Comparator<Comment>() {
39             @Override
40             public int compare(Comment o1, Comment o2) {
41                 if (o1 != null && o2 != null) {
42                     return (int) (o1.getDate().getTime() - o2.getDate().getTime());
43                 }
44                 return 0;
45             }
46         });
47         return comments;
48     }
49 }

Comment实体如下:

 1 package yaolin.code;
 2 
 3 import java.sql.Date;
 4 
 5 public class Comment {
 6 
 7     private int id;
 8     //
 9     private Date date;
10 
11     public int getId() {
12         return id;
13     }
14 
15     public void setId(int id) {
16         this.id = id;
17     }
18 
19     public Date getDate() {
20         return date;
21     }
22 
23     public void setDate(Date date) {
24         this.date = date;
25     }
26 
27 }
收获园豆:15
92年程序员 | 菜鸟二级 |园豆:223 | 2016-11-19 23:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册