Jason ---分享,共同进步

激情成就梦想,努力创造未来
随笔 - 53, 文章 - 1, 评论 - 45, 引用 - 0
数据加载中……

hibernate 一对多集合 set查询问题

今天解决了一个问题(如题),这个问题一致没有解决,以前的项目中也遇到过但是都没有花时间去研究,这回彻底的整理了一下。问题如:一个老师类(Teacher)和一个学生类(User),一个老师有多个学生,当然这个例子不够好,不管怎样就是这个意思,老是对应多个学生,oneto many

 

        <set name="users" inverse="true" order-by="column" ><!-- sort="natural"   -->
            <key>
                <column name="teacher_id" length="36">
                    <comment>老师表主键</comment>
                </column>
            </key>
            <one-to-many class="User" />
        </set>

 

以前遇到这个问题,都是通过lazy=false来实现,虽然能实现效果但是效率上会有问题也会产生N+1的查询问题。

我一致比较喜欢使用 hibernate的 left join fetch 方式来抓取结构,但是我现在是要在查询老师的列表中显示他所有的学生,如果用 select teacher from Teacher teacher left join fetch teacher.users这样的方式来得到学生集合,这样老师的数据集合会有重复数据,不知我这样说是否理解,如果遇到我这样的问题应该比较了解了,使用了很多方法也没有通过,当然实现这个效果可以有别的方式(虚列方式,或这采用 native sql ),我现在就是针对这种抓取的方式(暂时还是没有找到方案,如果知道的可以告诉我),我现在采用的方式还是上面的抓取方式,出现的重复数据,我把结果集拿出来之后,把重复的数据过滤掉,这样暂时能解决问题。然后是后面的出去的users 排序的问题,默认我们使用的set set大家都知道是没有顺序的,我们一种方式是 order-by="column" 上面的,采用这种方式来实现排序,另一种方式是采用 sort="natural" 方式来实现,但是如果要用sort方式就需要实现compareble 接口 实现 compareTo 方法 来自定义比较的规则,第二种方式我试验一下有点问题,他们的原理都是通过这两个规则 指定set最后的实现类 。

posted on 2011-08-19 17:21 agun 阅读(1998) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: