Hibernate中实现Set集合的排序
2018-02-27 23:03
399 查看
问题起源:http://blog.csdn.net/akmissxt/article/details/79393251
Hibernate的一对多、多对一和多对多关系中,使用Set集合储存数据,所以可能存在多次查询得到的数据顺序不一致。
以博客系统为例,用户类User中有专栏类Category的Set集合(隐去其他无关属性):public class User {
private Set<Category> categories = new HashSet<Category>();
public Set<Category> getCategories() {
return categories;
}
public void setCategories(Set<Category> categories) {
this.categories = categories;
}
}
登录成功后,服务器会将登录用户的信息设置到session会话中:session.setAttribute("loginUser", db_user);
然后登录成功后页面通过for each标签遍历session会话中的loginUser显示该用户categories集合中的内容:<!-- 获取专栏以及专栏下的文章 -->
<div id="categories" class="easyui-tree" border=false >
<c:forEach var="cate" items="${loginUser.categories }">
<b><p style="font-size:150%">${cate.title }</p></b>
<c:forEach var="arti" items="${cate.articles }">
<p>${arti.title }</p>
</c:forEach>
</c:forEach>
</div>
但是同一用户多次登陆,会发现显示的专栏名顺序不一致(无序):
对此,可以在设置登录信息之前对loginUser的Set集合进行排序解决问题: //将categories集合有序化
Set<Category> categories = db_user.getCategories();
TreeSet ts = new TreeSet(categories);
//将有序的Set集合赋值给categories
db_user.setCategories(ts);
//登陆成功,设置登录信息
session.setAttribute("loginUser", db_user);还需要在Category中实现Comparable接口: @Override
public int compareTo(Category o) {
return (int)(this.cate_id-o.cate_id);
}
因为有序化操作在控制层进行,对对象操作不会影响数据库数据,categories仍然以HashSet存取数据,对整体性能影响不大。
Hibernate的一对多、多对一和多对多关系中,使用Set集合储存数据,所以可能存在多次查询得到的数据顺序不一致。
以博客系统为例,用户类User中有专栏类Category的Set集合(隐去其他无关属性):public class User {
private Set<Category> categories = new HashSet<Category>();
public Set<Category> getCategories() {
return categories;
}
public void setCategories(Set<Category> categories) {
this.categories = categories;
}
}
登录成功后,服务器会将登录用户的信息设置到session会话中:session.setAttribute("loginUser", db_user);
然后登录成功后页面通过for each标签遍历session会话中的loginUser显示该用户categories集合中的内容:<!-- 获取专栏以及专栏下的文章 -->
<div id="categories" class="easyui-tree" border=false >
<c:forEach var="cate" items="${loginUser.categories }">
<b><p style="font-size:150%">${cate.title }</p></b>
<c:forEach var="arti" items="${cate.articles }">
<p>${arti.title }</p>
</c:forEach>
</c:forEach>
</div>
但是同一用户多次登陆,会发现显示的专栏名顺序不一致(无序):
对此,可以在设置登录信息之前对loginUser的Set集合进行排序解决问题: //将categories集合有序化
Set<Category> categories = db_user.getCategories();
TreeSet ts = new TreeSet(categories);
//将有序的Set集合赋值给categories
db_user.setCategories(ts);
//登陆成功,设置登录信息
session.setAttribute("loginUser", db_user);还需要在Category中实现Comparable接口: @Override
public int compareTo(Category o) {
return (int)(this.cate_id-o.cate_id);
}
因为有序化操作在控制层进行,对对象操作不会影响数据库数据,categories仍然以HashSet存取数据,对整体性能影响不大。
相关文章推荐
- hibernate注解实现set集合排序
- Hibernate (四) Set List Map 集合映射 和排序
- 集合框架——Set(TreeSet实现Comparator方法排序)
- 为TreeSet集合增加比较器实现排序
- Java基础知识强化之集合框架笔记47:Set集合之TreeSet保证元素唯一性和比较器排序的原理及代码实现(比较器排序)
- 对hibernate的set集合进行排序
- Hibernate中Set集合排序
- Hibernate-多关系时对应的多个关联对象Set集合进行排序
- Hibernate 中对set的集合的排序解决办法
- java的Set、Map、Deque集合;实现排序
- My_Java之笔记(8)- 实现TreeSet集合的排序方法
- 对hibernate的set集合进行排序2
- 对hibernate的set集合进行排序
- Hibernate--Enum类型的set集合映射到数据库(xml配置文件实现方式)
- Golang 实现 set 集合,变相实现 切片去重、排序 功能
- 对hibernate的set集合进行排序
- set集合实现排序
- 针对hibernate中 Set 集合 的排序
- 对hibernate的set集合进行排序
- 17.集合Set,HashSet,TreeSet及其底层实现HashMap和红黑树;Collection总结