Hibernate(24): 为什么用DetachedCriteria不能表连接地取数据?
中,
实验2为了能更好地模拟项目的真实环境, 我把t.commit()一句放到了真正调用wife.getName()语句之前. 抛异常了,
org.hibernate.LazyInitializationException!
这个很好理解,毕竟这里的Wife对象还只是一个Hibernate创造的代理类对象,也就是并没有真正的数据.
但奇怪的是,同样的代码(即在wife.getName()前执行t.commit),有时会抛那个异常,有时就没了.
实验时Main方法里的代码如下:
Map wifeMap = (Map) getWife.list().get(0); //getWife是DetachedCriteria类型变量
Wife wife = (Wife) wifeMap.get("wifeAlias");
// Hibernate.initialize(wife);
t.commit();
System.out.println("wife's name: "+wife.getName());
好家伙,一个匪夷所思的问题来, 得查下去.
....
一番有些"闹心"的排查后,发现是Eclipse的debug功能骗了我:
上面说的执行代码不抛异常时都是我用Debug运行时,而且断点是设在wife.getName()执行前的,
更"苛刻"的条件是这时在Eclipse里把鼠标停在wifeMap变量上看它属性都是什么内容. 如下图所示:
这时, 问题通了: 当把鼠标放到wifeMap上看其属性内容时,
Hibernate的session还没关,Eclipse会自动用Session把Wife信息(也就是上图中entrySet值)给实例化,这也就是
为什么大概一秒后entrySet就有值了. 但正常Run时,就没这回事了, 抛异常也就理所当然了.
"为什么Eclipse欺骗了我"的问题了, 但这样,项目中的问题还没解决, 怎么办?
DetachedCriteria是要在Action中准备好再传给dao的, dao传回来一个代理后,Session就关了,
没机会再二次去取Wife信息的.
用org.springframework.orm.hibernate3.support.OpenSessionInViewFilter!
这样就可以保证在整个Request期间Session都是开着的.
分享到:
相关推荐
精通Java EE:Eclipse Struts2 Hibernate Spring整合应用案例代码和数据库压缩包6
【Hibernate Tools for Eclipse Plugins】是Eclipse集成开发环境中用于支持Hibernate框架的一组插件,它提供了许多方便开发者的功能,如代码生成、配置文件编辑、逆向工程等。这些工具极大地简化了Hibernate应用的...
【标题】"Hibernate Tool非Eclipse插件方式运行"涉及的是在不依赖Eclipse环境的情况下,如何使用Hibernate Tool工具进行数据库操作。Hibernate Tool是Hibernate框架的一部分,它提供了一系列命令行工具,可以用来...
接下来,我们将深入探讨Hibernate的核心概念、如何在Eclipse中导入源码以及如何利用这些源码进行学习。 1. Hibernate 核心概念: - ORM(Object-Relational Mapping):ORM是将数据库中的关系数据映射为Java对象的...
所以我将这款插件基于HibernateSynchronizer 3.19 版本进行了修改升级,让插件支持到eclipse 4.*全部版本,安装方式与老版本无区别,丢到plugins目录就可以了,不懂的百度一下。 注意:这个版本只支持4.*版本,如果...
标题“Eclipse下的Hibernate Tools”指的是在Eclipse集成开发环境中使用的Hibernate插件工具。这个工具集使得开发者能够更方便地进行Hibernate对象关系映射(ORM)框架的开发工作,包括模型类的生成、HQL查询的编写...
【标题】"eclipse项目Hibernate实例"涉及到的是Java开发中的持久化框架Hibernate在Eclipse集成开发环境中的实际应用。Hibernate是一种流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的Java语言来操作...
Hibernate Tools is a toolset for Hibernate implemented as an integrated suite of Eclipse plugins, together with a unified Ant task for integration into the build cycle. Hibernate Tools is a core ...
"Hibernate Eclipse开发必备包"就是专门为Eclipse用户准备的一系列工具和库,旨在优化Hibernate在Eclipse中的开发体验。 这个压缩包可能包含以下关键组件: 1. **Hibernate Tools**:这是Eclipse的一个插件,提供...
### 关于《Beginning Hibernate: For Hibernate 5》的知识点总结 #### Hibernate 5 概述 - **定义**: Hibernate 是一款流行的开源对象关系映射(ORM)框架,它简化了数据库与 Java 对象之间的交互过程。 - **版本**...
### Eclipse开发第一个Hibernate程序 #### 引言 Hibernate是一个开源的对象关系映射(ORM)框架,用于Java应用程序,它能够将面向对象的数据模型与关系型数据库进行映射,简化了数据库的操作过程,使得开发者可以...
本教程将深入讲解如何利用Eclipse IDE来开发基于Hibernate的应用程序。 首先,Eclipse是Java开发者的首选集成开发环境,因为它提供了丰富的功能,如代码自动完成、调试工具和项目管理,使得开发过程更加高效。为了...
《JavaWeb整合开发完全自学手册》介绍如何整合Struts+Hibernate+Spring+Eclipse进行J2EE开发,所有实例都基于MyEclipseIDE开发,引领读者快速进入基于JavaWeb的J2EE应用领域。《JavaWeb整合开发完全自学手册》主要...
内容:hibernate001:通过 XML 配置的基本示例 hibernate002:通过注释配置的基本示例 hibernate003:会话方法练习 hibernate004:组件使用示例 hibernate005:单向关系映射示例 hibernate006:双向关系映射示例 ...
**Hibernate Tools 使用与Eclipse逆向工程详解** Hibernate Tools是Hibernate框架的一个扩展,它为开发者提供了在Eclipse集成开发环境中方便地操作Hibernate对象的强大工具。这些工具包括了实体类的生成、映射文件...
《精通J2EE—Eclipse Struts Hibernate Spring 整合应用案例源代码1》这个压缩包文件主要包含了一个基于J2EE平台的、利用Eclipse开发工具,整合Struts、Hibernate和Spring框架的综合应用案例的源代码。这些源代码是...
《精通J2EE--Eclipse、Struts、Hibernate及Spring整合应用案例完整源码》是针对Java企业级开发的一份重要资源,它涵盖了四个关键的技术领域:Eclipse集成开发环境,Struts MVC框架,Hibernate对象关系映射工具,以及...
【标题】:Hibernate分页(Eclipse项目) 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作。本项目主要关注如何在使用Hibernate时实现分页功能,这对于处理大数据集的Web应用尤其...
**Eclipse 在线配置 Hibernate Tools** Eclipse 是一个广泛使用的集成开发环境(IDE),尤其在Java编程领域中,它提供了丰富的功能支持。Hibernate 是一个流行的持久化框架,用于简化数据库与Java对象之间的交互。...
3、调试环境:eclipse(File-import-existing Eclipse projects选项来导入项目),导入项目后,如果lib库jar文件链接错误,请按照以下步骤重新添加:在项目名“jpaMVC”上右键点击-Bulid Path-Libraries-Add External ...