0 0

关于一对多映射时父表数据重复查询出来的问题?5

今天遇到一个问题,父子表关系映射配置好后,查询了一下父表可以正常得到数据(包含子表的数据)。当我往子表内添加多条数据后,再从父表查询数据,这时问题就出来了。居然重复查询出多条父表的数据,重复的次数和子表里数据的数量一样。比如父表一条,子表关联父表三条,那就得到了父表相同的三条数据。我用hibernate,控制台生成的sql如下:

select
        goodsmodel0_.uuid as uuid1_2_,
        goodsmodel0_.model as model2_2_,
        goodsmodel0_.name as name3_2_,
        goodsmodel0_.time as time4_2_ 
    from
        tbl_goods goodsmodel0_ 
    left outer join
        tbl_goodsReptile reptileset1_ 
            on goodsmodel0_.uuid=reptileset1_.goodsUuid 
    where
        1=1 
    order by
        goodsmodel0_.uuid asc limit ?

 

2013年8月05日 18:57

3个答案 按时间排序 按投票排序

0 0

sql不是有distinct 把相同的记录变成单条吗?

2013年8月07日 11:10
0 0

楼主的情况是出现sql的笛卡尔积情况,看了hql转化的sql,应该是父表的goodsmode.uuid对应子表的goodsReptile.goodsUuid,一对多关系,配置一方里面的set/list 节点的lazy为false的时候, fetch策略为join就会出现重复记录, 不用fetch属性就OK了,

2013年8月06日 07:58
0 0

将你的映射配置文件贴出来!

一般注解的配置一对多如下:

class Parent{
 @Id
 private int parentid
 @OneToMany(fetch = FetchType.LAZY)
 @JoinColumn(name = "parent_Id") //子表中的主表主键(外键),
 @BatchSize(size = 20)
 List<Child> children;
}



如果出现你所提到的上述问题,请查看下你的两张关联表对象(model)中的主键是否设置的正确

2013年8月05日 21:30

相关推荐

    一对一映射一对一映射

    一对一映射是数据库设计中的一个重要概念,特别是在关系型数据库中,它用于描述两个表之间的一种特殊关系,即每个表中的记录最多只能与另一个表中的一条记录相关联。这种关系非常紧密,通常出现在一个实体的信息被...

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

    其次,一对多映射通常用于表示一个实体可以拥有多个子实体的关系,如公司与员工。在Hibernate中,这可以通过`&lt;one-to-many&gt;`标签实现。在父类中,我们定义一个集合类型的属性,对应子类的主键作为外键。而在子类中,...

    JAVA数据类型与Hibernate的类型映射

    在实际应用中,Hibernate还提供了一些高级映射机制,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)的关系映射。这些映射通过@OneToOne、@OneToMany、@ManyToOne和@...

    hibernate知识复习三:关联映射:一对多/多对一

    本文将深入探讨Hibernate中的关联映射,特别是“一对多”和“多对一”的关系映射,这对于理解如何在Java应用程序中处理复杂的数据库交互至关重要。 一、Hibernate简介 Hibernate是Java平台上的一个开源ORM框架,它...

    Mybatis实现一对一,一对多数据插入数据实验报告.docx

    【Mybatis实现一对一,一对多数据插入数据】 在软件开发中,尤其是在涉及到数据库操作时,数据关系的处理是非常关键的一部分。Mybatis,一个优秀的持久层框架,提供了方便的方式来处理复杂的数据关系,包括一对一和...

    Hibernate一对多单向关联映射

    **标题:“Hibernate一对多单向关联映射”** 在Java Web开发中,关系数据库与对象模型之间的转换是一个重要环节,Hibernate作为一款强大的ORM(Object-Relational Mapping)框架,简化了这一过程。本文将深入探讨...

    数据结构:映射.pdf

    数据结构中的映射,通常指的是关联数组或哈希表,是一种高效的数据组织方式,用于存储键值对。在C++中,`map`是映射的一种实现,它内部基于红黑树,提供O(log n)的时间复杂度进行查找、插入和删除操作。红黑树是一种...

    基于内存映射文件的海量点云数据快速读取方法.pdf

    本文提出了一种基于内存映射文件的海量点云数据快速读取方法,以解决海量点云数据读取效率低下的问题。该方法通过对虚拟内存系统模式和内存映射文件的工作机理进行分析,将磁盘文件映射至虚拟内存,并采用内存映射...

    Hibernate学习之 : 一对多关联映射

    本文主要探讨的是Hibernate中的一对多关联映射,这是一种常见的关系数据库模型,用于表示实体间一对多的关系。 一对多关联映射在Hibernate中意味着一个实体(比如一个部门)可以与多个其他实体(如部门下的员工)相...

    Hibernate多对多的映射

    2. 避免N+1问题:在遍历一对多或多对多关系时,可能会触发N+1次查询。通过`@BatchSize`注解可以设置批量查询,减少数据库交互次数。 3. 使用Set代替List:由于多对多关系可能存在重复数据,推荐使用`Set`而不是`...

    hibernate set 集合映射

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

    java一对多

    在Java编程语言中,"一对多...总之,"hh一对多"可能是在描述使用Hibernate处理一对多关系时遇到的问题或解决方案。理解并正确配置和使用这种关系对于开发复杂的Java应用程序至关重要,特别是当涉及到数据库交互时。

    EFCore查询不重复数据Distinct.docx

    在.NET Core开发中,Entity Framework Core (EFCore) 是一个常用的对象关系映射框架,它允许开发者使用C#代码操作数据库。在这个场景中,我们关注的是如何使用EFCore查询不重复的数据并根据特定字段进行排序。`...

    Hibernate关联映射总结

    多对一映射是上述一对多映射的逆向形式,即多个实体共享一个父实体。 ```java public class Student { private int id; private String name; @ManyToOne @JoinColumn(name = "class_id") private Class clazz...

    Mybatis的一对一,一对多

    - **延迟加载**:如果开启,当首次访问一对多关系时,MyBatis会执行关联的SQL查询,而不是在初始加载时就获取所有数据。 ### 总结 MyBatis在处理一对一和一对多关系时,提供了灵活且高效的解决方案。开发者可以...

    ibatis实战之一对多关联(源代码)

    在IT领域,特别是Java开发中,iBatis是一个非常受欢迎的...以上是关于iBatis一对多关联映射的实战介绍,希望对您在开发过程中有所帮助。更多关于iBatis的高级用法和最佳实践,可以通过文章链接中的资源进行深入学习。

    Hibernate(一对多表操作)

    在实际应用中,应谨慎处理一对多关系的空值和重复值问题,避免数据冗余和不一致性。此外,合理设计数据库索引也能提高查询效率。 总结,Hibernate的一对多关系映射提供了灵活的配置方式和强大的功能,使得数据库...

    DBScript一个开源的轻量级数据库映射框架

    数据库映射框架的核心功能是将数据库中的表和字段映射为对象和属性,这一过程通常被称为对象关系映射(ORM)。DBScript实现了这种映射,使得开发者可以通过面向对象的方式与数据库进行交互,避免了频繁的手动编写SQL...

    使用jpa映射关联和继承

    2. **一对多(OneToMany)映射**:一个实体对象可以对应多个子对象。使用`@OneToMany`注解,可以设置`mappedBy`属性,表示关联的反向引用。还可以设置`fetch`策略(EAGER或LAZY),控制关联数据是否在加载主体对象时...

Global site tag (gtag.js) - Google Analytics