`
manjingtou
  • 浏览: 121122 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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最后的实现类 。

分享到:
评论

相关推荐

    hibernate 一对多 set 与 list 分别用法

    在Java的持久化框架Hibernate中,一对多关系是常见的实体关联类型,表示一个实体可以与多个其他实体相关联。在处理这种关系时,我们通常会使用`Set`或`List`作为关联集合的容器。本篇文章将深入探讨`Hibernate`中一...

    hibernate set 集合映射

    3. **关联映射**:集合映射通常涉及到两个实体之间的关联,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)关系。 4. **集合属性映射**:在实体类中,集合属性需要使用...

    hibernate一对多代码

    本文将详细解析"hibernate一对多映射"的概念、配置及其实现过程,以帮助理解并掌握这一核心特性。 首先,我们要明白在关系型数据库中,"一对多"关系意味着一个实体(比如一个部门)可以有多个相关实体(如部门下的...

    hibernate一对多实例

    标题中的“hibernate一对多实例”指的是在Java编程中使用Hibernate框架处理数据库关系时的一对多关联映射。Hibernate是Java领域中的一个流行对象关系映射(ORM)框架,它允许开发者用面向对象的方式操作数据库,从而...

    Hibernate(一对多表操作)

    在Hibernate的XML映射文件中,我们可以使用`&lt;set&gt;`、`&lt;list&gt;`、`&lt;map&gt;`或`&lt;bag&gt;`元素来表示一对多关系。以用户和订单为例,`User`类对应一个`Order`类的集合: ```xml &lt;!-- User.hbm.xml --&gt; &lt;set name="orders" ...

    hibernate 一对多,两个实例项目

    在Hibernate中,一对多关系可以通过在实体类中定义集合属性(如List、Set等)来实现,同时配合使用`@OneToMany`注解。例如,一个学生可以有多个课程,那么"学生"就是"一"端,"课程"就是"多"端。配置时,需要指定`...

    hibernate 双向 多对对,一对多,一对一 映射的 集合

    本主题将深入探讨双向多对多、一对多和一对一映射的概念及其在集合中的应用。 首先,我们来看双向多对多映射。在数据库设计中,两个实体之间可能存在多对多的关系,例如学生和课程,每个学生可以选修多门课程,每门...

    Hibernate多对多关联添加及查询示例

    本示例主要关注的是Hibernate中的多对多关联映射及其添加与查询方法。 多对多关联是数据库设计中的一种常见关系类型,指的是两个实体之间可以存在多个对应关系。例如,在学生与课程的关系中,一个学生可以选修多门...

    hibernate一对多,多对一,一对多双向关联

    7. **集合映射:** 对于一对多关系,通常使用集合(如 List, Set)来存储关联的对象。Hibernate提供了集合映射的配置,如 @OneToMany 的 mappedBy 属性用于指定关联的反向引用字段。 8. **双向关联的维护:** 在...

    Hibernate一对多实例

    本教程将详细讲解如何在Hibernate中实现一对多的关系实例,涵盖一对多的插入和查询操作。 首先,我们要理解一对多关系的基本概念。在数据库设计中,一对多关系意味着一个实体可以与多个其他实体相关联。例如,一个...

    hibernate 一对多

    一、Hibernate一对多关系概述 在数据库设计中,一对多关系意味着一个表(父表)中的记录可以与另一个表(子表)中的多个记录相对应。例如,一个学生可以有多个课程,而一门课程可以被多个学生选修。在Hibernate中,...

    hibernate 一对多 增删改差

    在Java的持久化框架Hibernate中,"一对多"(One-to-Many)关系是一种常见的实体关联类型,它代表了一个实体可以与多个其他实体相关联。本篇将详细讲解如何使用Hibernate处理这种关系,并涵盖增、删、改、查(CRUD)...

    Hibernate的多对一和一对多操作实例

    本文将深入探讨Hibernate框架下“多对一”和“一对多”的关联关系,并通过一个具体示例来阐述其操作流程与实现细节。 ### Hibernate中的“多对一”和“一对多” 在数据库设计中,“多对一”(Many-to-One)和“一...

    hibernate之一对多配置demo

    一、Hibernate一对多关系 在现实世界中,一对多关系很常见,例如一个班级可以有多名学生。在数据库中,这对应于一个表(如班级表)有一条记录可以关联多条记录(如学生表)。在Hibernate中,我们通过配置XML文件来...

    Hibernate一对多(多对一)双向关联(annotation/xml)

    在Java的持久化框架Hibernate中,一对多(Many-to-One)和多对一(One-to-Many)的关系映射是数据库关系模型中的常见关联类型。本文将深入探讨这两种关联方式在使用Hibernate时的配置,包括基于注解(Annotation)和...

    Hibernate基于连接表的一对多单向关联

    总结,"Hibernate基于连接表的一对多单向关联"涉及到的主要知识点包括:数据库设计的一对多关系、Hibernate的实体映射、单向关联的配置、以及如何在Java代码中操作和查询这种关联。理解并熟练应用这些知识点,对于...

    hibernate如何实现一对多的关联源代码

    Hibernate一对多关联配置 #### XML配置方式: 在Hibernate的映射文件中,我们通常会在一方(拥有端)的实体类映射文件中添加`&lt;set&gt;`或`&lt;list&gt;`标签来表示一对多关系。以下是一个简单的例子: ```xml &lt;!-- "一"端...

Global site tag (gtag.js) - Google Analytics