一对多排序的问题(多端是引用类型的数据)
来源:互联网 发布:稻草人 知乎 编辑:程序博客网 时间:2024/05/18 00:15
对于持久层框,想必大家用的最多属Hibernate3了吧,本人在使用Hibernate3.2.6一对多(双向)碰到了很头疼的问题,后来经过自己的思索和尝试,终于搞定了Hibernate3.2.6中一对多的排序问题.
本人拿抽奖的情况来说明下这个问题.
如现存在抽奖期数表(JiangNum),奖品表(JiangList),中奖名单表(JiangMem);它们之间存在以下的关系.JiangNum与JiangMem之间存在一对多(双向)的关系,JiangList与JiangMem之间也存在(双向)的关系.(切记:在使用hibernate3.2.6关联中最好不要组成关联链,再加一个如JiangNum与JiangList一对多的问题就造成了关系链,这样会出现莫名其妙的问题).
现有以下需求.要列出本期中奖的所有用户,并且按照用户的中奖等级排序,即(一等奖排前面,之后是二等奖,三等奖...),表示中奖等级的字段在JiangList表中.
正常情况下,查出JiangNum中会查出所有的中奖用户名单,而JiangMem中含有一个JiangList的引用,是要按照引用的某个属性排序.
hibernate3.2.6中在Hbm映射文件中Set结点中的相关配置有Sort和Orderby来控制排序,正常情况下(只能配置基本数据型),hibernate3.2.6查询多端的时候会按照配置的字段排序,Orderby是加在SQL语句中,即查询的时候排序;Sort是在查询的结果放入Set中按照某个字段进行排序.(这些只对普通的属性有用,而对于引用类型的数据不
起作用).
本人尝试了多种方式,得出来的结果都是没有顺序的..(郁闷)
最后本人在Action层对查询出来的结果进行迭代,之后再依次加入新创建的TreeSet(大家都知道TreeSet是有顺序的),当然在创建的时候需要加入比较器(JiangMem),即Set<JiangMem> memSet = new TreeSet<JaingMem>(new 创建的比较器),然后在前台页面迭代就可以实现排序了..也许会有人说在Pojo里面(JiangNum)里面持有JiangMem的Set时就创建TreeSet不就行了,理论没有问题,但是本人经过测试,这样是不可行的.
如果高手们还有更好的解决方式,大家进行讨论一下!谢谢.
本人最近发现在hibernate3.2.6里面排序的时候是可以用Orderby来做的.它是用来直接操作SQL语句的.
使用的时候应该注意几点:
在一的一端配置的时候代码如下:
多的一端代码如下:
orderby 里面的字段一定是多的一端中表里面的字段,另外不要延迟加载..
- 一对多排序的问题(多端是引用类型的数据)
- JPA一对多关系,在一端更新所包含多端引用的问题
- mybaits xml 一对多 多端的关联一端 association 的用法。
- Hibernate的Set映射(一对多)的排序问题
- Hibernate的Set映射(一对多)的排序问题
- mybatis 一对多的配置 和 查询数据覆盖问题
- C#值传递引用类型数据的问题
- 一对多关系是前端展示数据问题
- 形式参数是引用类型的时候 返回值类型是引用类型的时候
- 字符串是特殊的引用类型
- [java]引用类型传的是地址
- 一对多里对 set 的排序
- 一对多的查询排序ui
- TreeSet中引用类型的排序
- 方法参数是基本类型和引用类型的区别
- java例程练习(引用类型数据的排序和查找)[外篇]
- 通过利用引用型数据和基本型数据的区别可以判断出数据的类型是否是引用型的String为例
- 问题六:C++中&是干嘛用的(引用类型)
- 【资料】Spring 依赖的Jar包简介
- flex加载xml
- Tomcat外部Debug
- 用delphi开发activex打印控件
- oo_alv的event
- 一对多排序的问题(多端是引用类型的数据)
- 如何搜索木马隐藏的系统文件(downmoon原创)
- JavaScript字符串函数大全
- 今天的中国比当年的日本面临更为严峻的压力
- sizeof 往事重提
- 获取HTML DOM节点元素的方法的总结
- jQuery 学习十三(效果)
- 软件项目管理
- ida, ollydbg 使用 PDB. _NT_SYMBOL_PATH