`
hbxflihua
  • 浏览: 676783 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hibernate多表查询中单表的同一条记录内存共享时弊病的处理

 
阅读更多

在查询A表时关联了B表、C表,C表和A表是多对一的关系,B和C一对一的关系。我将三张表的数据整合在一起做成一个视图。hibernate多表查询中单表的同一条记录内存共享,对于有多条C表记录与A表对应时,Hibernate不会对A表进行重复查询,与之关联的C表的多条记录也不会继续查询,而仅仅是复制之前C的对象。这不是我想要的结果。

 

Hibernate管理的表原则上需要有主键,Hibernate对数据的所有操作大都以这个主键为准。主键有一般主键和组合主键两种。以上的三张表各有各的主键,C表和A表是多对一的关系。如果以C表的主键为视图的主键则不会出现上述问题,当以A表的主键为视图中的主键时,由于结果集中A表的主键有重复,Hibernate根据缓存机制进行了不再重复检索的优化。这种优化在此时来说无疑是画蛇添足的。

 

那么如何避免这种问题呢?下面给出两种解决方案。

 

方案一:临时构建一个唯一主键,该主键只用于取消Hibernate的重复对象不检索的功能。这种方案具有通用性。不管你的组合查询中有多少张表,设立一个临时唯一主键,就可以得到你想要的结果。这里我们将uuid设置为主键,原来的主键改为一个普通的属性。

 

select sys_guid() as uuid, t.* from ( select distinct a.*,b.is_complated from A a , C c,B b where a.aid=c.aid and c.cid=b.cid )t;


 

 

 

方案二:如上述问题,这里CA有着多对一的关联关系。C中有着A的外键,通过C可以查询所有A表中的内容。这时可以将C表的主键设为视图中的主键。推而广之,如果你想通过组合查询查询更多多张表中的记录返回在一个结果集中,建议选择一个可以唯一标示其中每条记录的列作为主键,或者通过创建组合主键的方式来达到想要的结果。但这种方式有时存在局限性,考虑不周还是很容易再次出现上述问题。

 

1
1
分享到:
评论
1 楼 bingyingao 2011-12-13  
不错...

相关推荐

    Java中单表和多表级联的增删改查

    "Java中单表和多表级联的增删改查"这个主题涵盖了基础的数据库操作以及更复杂的关联查询技术。以下是对这些知识点的详细解释: 1. **单表的增删改查(CRUD)**: - **Create(创建)**: 在Java中,通常使用JDBC...

    SQL Server中单引号的两种处理技巧

    总结,处理SQL Server中单引号问题的关键在于理解转义字符的概念以及如何利用参数化查询的优势。在实际编程中,推荐使用参数化查询,以提高性能和安全性。同时,为了防止SQL注入攻击,应避免直接在SQL语句中拼接用户...

    10.ESQL/C中单记录的检索和查询.doc

    虽然`SELECT`语句通常会产生包含多条记录的结果表,但在C程序中往往需要逐条处理这些记录。因此,需要在SQL的集合处理方式和C程序的单条记录处理方式之间建立一种桥梁,这就是游标的用途。游标是一种SQL对象,用于...

    Java多线程编程环境中单例模式的实现

    ### Java多线程编程环境中单例模式的实现 #### 概述 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式的应用非常广泛,特别是在资源管理、日志记录、...

    网页中单表格支持横纵表头锁定

    网页中单表格支持横纵表头锁定,网页中单表格支持横纵表头锁定

    py源码实例excel处理实例单工作簿拆分到多工作簿中单表中

    3. **性能考虑**:对于非常大的Excel文件,处理过程中可能会消耗较多的内存资源。可以通过适当优化代码逻辑或限制一次性处理的工作表数量来改善性能。 4. **安全性**:如果涉及到敏感数据的处理,请确保遵循相关的...

    九九乘法表-MFC中单文档界面

    本项目“九九乘法表-MFC中单文档界面”就是使用MFC框架来实现的一个经典示例,旨在展示如何在Windows环境下用C++编程实现一个简单的教育软件。 单文档界面(Single Document Interface, SDI)是一种常见的应用程序...

    MFC中单文档与多文档使用总结

    ### MFC中单文档与多文档使用总结 #### 重要概念与区别 MFC(Microsoft Foundation Classes)作为Visual C++中的一个重要的类库,提供了丰富的功能来帮助开发者快速构建Windows应用程序。在MFC中,单文档界面(SDI...

    行业文档-设计装置-一种在BS系统中单纸币钞箱交易处理方法.zip

    在IT行业中,尤其是在金融自助设备或者智能零售终端的设计与开发领域,"一种在BS系统中单纸币钞箱交易处理方法"是一个重要的技术主题。BS系统通常指的是基于浏览器/服务器架构的应用系统,它广泛应用于互联网服务,...

    自然语言生成多表SQL查询语句技术研究.pdf

    在当前阶段,已有的基于深度学习模型的方法主要集中在数据库中单表SQL查询的生成上,但尚未能够有效处理多表SQL查询的生成问题。 为了解决这个问题,研究团队采用了基于SQL语句模板填充的方法。这种方法的核心思想...

    VC中单文档静态分隔条的实现

    在Microsoft Visual C++ (VC++) 开发环境中,创建一个单文档界面(Single Document Interface, SDI)应用程序并实现静态分隔条(Fixsplit)是一项常见的需求。这允许用户在同一个文档窗口内查看和操作不同的视图,...

    数据库 计算单条 数据大小

    数据库 计算单条 数据大小 只需执行该sql 即可知道单条数据大小

    JSP开发之hibernate之单向多对一关联的实例

    JSP开发之hibernate之单向多对一关联的实例 一对多的基础上来测试单向多对一的关联 hibernate多对一的关联关系定义: 和单向一对多不同的是:一对多是在意的一方的一方定义set集合,在映射文件中 :单向多...

    sql语句中单引号,双引号的处理方法

    在SQL语句中,单引号和双引号的处理方式是至关重要的,尤其是在处理字符串、数字、日期和布尔值时。以下是对SQL语句中单引号和双引号处理方法的详细解释: 1. **插入字符串型数据**: 当你需要插入字符串类型的...

    教学中单组前测后测时间序列准实验研究的数据处理的算法分析与设计.pdf

    在单组前测后测时间序列准实验设计中,研究者对同一组实验对象在实验处理前后进行多次测量。实验结构通常包括若干次前测、实验处理以及随后的后测。例如,教师可能在实验开始前几周对学生进行个别阅读学习的前测,...

    Excel中单选钮的应用——制作单选题.pdf

    在Excel中,选项按钮是一种非常实用的控件,尤其在制作单选题或者进行多选项交互时。本教程主要介绍了如何利用Excel的选项按钮来创建一份单选题测试。以下是详细步骤: 1. **插入分组框**: 在创建单选题时,通常...

    multisim中单相桥式PWM逆变电路的仿真

    在这个“multisim中单相桥式PWM逆变电路的仿真”项目中,我们将深入探讨如何利用Multisim来构建和分析一个基于IGBT(绝缘栅双极晶体管)的单相桥式脉宽调制(PWM)逆变电路。 首先,IGBT是一种电力电子开关元件,...

    delphi实现对access的单表组合查询

    本篇将深入探讨如何使用Delphi来实现对Access数据库中单表的组合查询。 组合查询(也称为联合查询)是指将两个或更多查询的结果合并成一个结果集。在Access中,我们通常使用SQL(结构化查询语言)来执行这样的操作...

    MS-SQL Server 中单引号的两种处理方法

    在这个示例项目中,我们使用 PUBS 数据库中的 EMPLOYEE 表,同时可以用 SQL 语法把其中两条记录中的 FNAME 改为“Paolo''f“、“Paolo'f“。 结论 MS-SQL Server 中单引号的两种处理方法可以解决数据库开发中常见...

Global site tag (gtag.js) - Google Analytics