`
leobluewing
  • 浏览: 240954 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

hibernate代理对象纠错过程

 
阅读更多
前两天同事遇见一个诡异现象,导入excel时,其他数据均没问题,只有一条出现职位为空的现象。

数据结构如下,OrgStation和orgUnit为双向关系。


public class Employee{
   private OrgStation majorStation;
}

public class OrgStation {
   private OrgUnit unit;
}

public class OrgUnit {
   private OrgStation leaderStation;
}



错误现象为:其他所有的employee对象经过sql fetch出来以后的majorStation都是真实对象,而唯有一条employee的majorStation为代理对象。

sql语句如下:
String hql = "from Employee as user "
			+ "left join fetch user.majorStation ms "
			+ "left join fetch ms.unit unit ";


错误很明显就是这个代理对象在fetch之前已经进入内存了。但是只执行了一条sql语句为什么会进来,百思不得其解。

纠结了10分钟之后,发现原来是unit里面的leaderStation问题。因为只fetch到unit层。unit里面的leaderStation为代理对象。

而employee里面为代理对象的职位正好是部门的领导职位,也就是fetch unit时候被代理的对象。到此真相大白。。

sql语句改为后错误解除。
String hql = "from Employee as user "
			+ "left join fetch user.majorStation ms "
			+ "left join fetch ms.unit unit "
                        + "left join fetch unit.leadStation ls";



总结一下,hibernate的错误归根结底就是那么几个,但是表现的错误形式各不相同。这个错误形式算是第一次见到。

而且还和excel的数据顺序有关,试想如果领导永远是排在第一个导入,这个错误压根也不会出现。。
分享到:
评论

相关推荐

    Hibernate对象的生命周期

    Hibernate对象的生命周期 Hibernate对象的生命周期 Hibernate对象的生命周期

    Hibernate 延迟加载剖析与代理模式应用

    在Hibernate中,当加载一个实体时,如果实体的某些属性被配置为延迟加载,那么Hibernate会生成一个代理对象来代替真实的集合或关联实体。这个代理对象包含了加载数据的方法。当应用程序尝试访问这些延迟加载的属性时...

    hibernate调用存储过程

    hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程

    精通Hibernate:Java对象持久化详解.zip

    《精通Hibernate:Java对象持久化详解》是一本深入解析Hibernate技术的专著,它主要针对Java开发者,旨在帮助他们理解和掌握Java对象持久化的精髓。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了...

    hibernate框架调用存储过程

    总结来说,Hibernate调用存储过程是通过`StoredProcedureQuery`对象实现的,提供了更简便的对象化API。对比JDBC,Hibernate更注重开发者体验,而JDBC则更适合对数据库操作有深度控制的需求。在实际开发中,根据项目...

    理解Hibernate中PO的代理类

    如果需要在事务外部使用这些对象,可以使用Hibernate的`initialize()`方法强制初始化代理对象。 值得注意的是,懒加载虽然能够提升性能,但也增加了系统复杂性。它可能导致难以预料的延迟,甚至在某些情况下引起...

    Hibernate对象关系映射

    Hibernate对象关系映射一对多 很基础等文档

    Hibernate 操纵持久化对象

    **标题:Hibernate 操纵持久化对象** 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。本篇将详细讲解如何使用Hibernate来操纵持久化对象,这对于深入理解...

    hibernate中session对象的状态详解

    hibernate中session对象的状态详解

    Hibernate使用存储过程

    在Hibernate中调用这个存储过程,我们需要创建一个事务,获取数据库连接,然后通过CallableStatement对象执行存储过程: ```java Transaction tx = session.beginTransaction(); Connection con = session....

    精通Hibernate:Java对象持久化技术详解.pdf

    《精通Hibernate:Java对象持久化技术详解》这本书深入剖析了Hibernate这一流行的Java对象关系映射(ORM)框架,旨在帮助开发者全面理解并熟练掌握Hibernate的使用。Hibernate是Java开发中的重要工具,它简化了...

    精通Hibernate:java对象持久化技术

    - **域模型**:面向对象的模型,包括实体域对象、过程域对象和事件域对象。域对象间的关系有关联、依赖、聚集和一般化。 3. **Java对象持久化**: - **持久化概念**:狭义上指对象到数据库的存储,广义上涵盖所有...

    Java 精通Hibernate对象持久化技术权威指南

    《Java精通Hibernate对象持久化技术权威指南》是一本深度探讨Java开发中如何高效地使用Hibernate进行对象持久化的专业书籍。本书旨在帮助Java开发者熟练掌握Hibernate框架,实现数据库操作的简化和自动化,提升软件...

    Hibernate操作持久化对象

    Hibernate 操作持久化对象是Java开发中用于简化数据库交互的重要工具。它是一个开源的Java持久化框架,由Gavin King创建,并逐渐发展成为Java世界中主流的持久化解决方案。Hibernate的核心在于提供对象-关系映射(ORM...

    MyEclipse由表自动生成Hibernate实体对象_白杨

    通过以上知识点的详细阐述,我们可以了解到如何在MyEclipse中利用Hibernate进行数据库表到Java实体对象的反向工程操作,以及操作过程中需要关注的各个环节和注意事项。这对于提升开发效率和保证开发质量具有重要的...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     9.6 通过Hibernate调用存储过程  9.7 小结  9.8 思考题 第10章 映射组成关系  10.1 建立精粒度对象模型  10.2 建立粗粒度关系数据模型  10.3 映射组成关系  10.3.1 区分值(Value)类型和实体(Entity)类型...

    Hibernate实体对象操纵

    **Hibernate实体对象操纵** 在Java开发中,Hibernate是一款非常重要的对象关系...希望本篇文章对您在学习Hibernate实体对象操纵的过程中有所帮助,如需进一步了解,可参考提供的"02_Hibernate实体对象操纵.ppt"文档。

Global site tag (gtag.js) - Google Analytics