项目用的持久化层是hibernate 2.1.6.
前不久出现一个错误,简单描述一下:
现有3个对象:Party,TParty和Individual,其中Individual是Party的子类,Party和TParty各自独立,两个对象都映射到表T_Party。
当独立执行Individual person = (Individual)session.load(Individual.class, id)时,系统正确,.
而在同一thread下(OpenSessionInView),先session.find("from TParty"),再Individual person = (Individual)session.load(Individual.class, id)系统报错ClassCastException,经查此时系统返回的是TParty对象。
初步断定是hibernate问题,参看hiberante 2.1.7没有觉的有什么问题(因为自己电脑本地有这个版本,事实证明这是个错误)。折腾了一天,没有发现问题所在,最后只好下载了hibernate2.1.6,立刻发现问题所在。
hibernate在load对象时,会通过getEntity(key)查看是否加载过,而Key对象几个主要方法如下:
private
Key(Serializable id, Serializable identifierSpace, Class clazz,
boolean
batchLoadable)
{
if
(id
==
null
)
throw
new
AssertionFailure(
"
null identifier
"
);
this
.identifier
=
id;
this
.identifierSpace
=
identifierSpace;
this
.clazz
=
clazz;
this
.isBatchLoadable
=
batchLoadable;
}
/** */
/**
* Construct a unique identifier for an entity class instance
*/
public
Key(Serializable id, ClassPersister p)
{
this
( id, p.getIdentifierSpace(), p.getMappedClass(), p.isBatchLoadable() );
}
public
boolean
equals(Object other)
{
Key otherKey
=
(Key) other;
return
otherKey.identifierSpace.equals(
this
.identifierSpace)
&&
otherKey.identifier.equals(
this
.identifier);
}
public
int
hashCode()
{
int
result
=
17
;
result
=
37
*
result
+
identifierSpace.hashCode();
result
=
37
*
result
+
identifier.hashCode();
这个Key在hiberante几个版本都一样
但在ClassPersister在2.1.6和2.1.7却有不同:
hibernate 2.1.7中在AbstractEntityPersister中
public
Serializable getIdentifierSpace()
{
return
rootClassName;
}
但在hibernate 2.1.6 中的EntityPersister
public
Serializable getIdentifierSpace()
{
return
qualifiedTableName;
}
问题就出在这里。赶紧把hibernate从2.1.6升级到2.1.8。
分享到:
相关推荐
Hibernate 2.1.6 参考文档.CHM
《Hibernate 2.1.6 中文手册》是针对Java开发者的重要参考资料,它详细阐述了Hibernate框架在2.1.6版本中的各项功能和用法。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者用面向对象的方式来操作...
标题 "Struts2.1.6 Spring2.5.6 Hibernate3.3.2" 描述的是一个基于Java的企业级应用程序开发的集成框架,其中包含了三个核心组件:Struts2、Spring和Hibernate。这些组件都是Java Web开发中的关键库,分别负责MVC...
MyEclipse8.0中自带的struts2版本是2.1.6,spring版本有2.0,2.5的,hibernate版本较多些至3.2,首先选版本就选择最优的,struts2没的选只有2.1.6版的,所以先导入struts2支持,然后是spring选的是2.0,问题就出在...
Struts2和Hibernate是两种非常重要的Java开源框架,它们在Web开发中扮演着核心角色。Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web框架,而Hibernate则是一个对象关系映射(ORM)工具,用于简化...
本项目是基于Spring Boot 2.1.6 RELEASE的Java基础服务项目脚手架设计源码,包含68个文件,主要文件类型为java、xml、properties、json、yml、gitignore、md、dm-code-generater/src/main/resources/使用说明、sql、...
根据给定文件的信息,本文将详细介绍如何配置Struts2.1.6、Spring2.0与Hibernate3.1这三个框架的整合开发环境。这是一套经典的MVC(Model-View-Controller)架构组合,适用于构建复杂的Java Web应用程序。 ### 一、...
Struts2.1.6、Spring2.5.6和Hibernate3.3.2是三个在Java Web开发中广泛使用的开源框架,它们的整合为开发者提供了强大的后端支撑。这个整合包是为了解决企业在构建基于Java的Web应用程序时面临的复杂性问题,通过将...
在这个压缩包中,包含了这三个框架的特定版本——Struts2.1.6、Spring以及Hibernate的所有必需的JAR文件,使得开发者可以快速地在项目中引入这些框架,而无需逐一查找和添加依赖。 1. **Struts2.1.6**:Struts2是一...
对于使用Struts2.1.6、Spring以及Hibernate这三个框架组合的项目而言,解决中文乱码问题尤为重要。本文将详细介绍如何通过配置`struts.properties`文件与`web.xml`中的过滤器来解决中文乱码问题。 #### 一、Struts2...
Struts2.1.6+Hibernate3.3.1+Spring2.5.6整合的完整jar包,花了很长时间从Struts2.1.6、Hibernate3.3.1、Spring2.5.6挑出来的,在项目中已经应用,没有问题,不要嫌分高,下载了看了就知道好不好了,好的话给个好评...
### Struts2.1.6 + Spring2.5.6 + Hibernate3.3.1 整合 在本文中,我们将详细介绍如何将Struts2.1.6、Spring2.5.6以及Hibernate3.3.1进行整合,并构建一个简单的MVC应用。通过这个过程,读者将了解到这三种框架的...
在这个特定的项目中,开发者选择了SSH2的特定版本:Struts2.1.6、Spring2.5.6和Hibernate3.3,并且强调了全注解开发,这意味着在配置文件中尽可能地使用注解来代替XML配置。 首先,让我们详细了解一下这三个框架的...
springboot + hibernate + gradle结合使用的工程,其中没有swagger定义的model类,但是springboot + hibernate + gradle部分是完全正确的,可供使用着参考
SSH 框架配置步骤图解(Struts2.1.6 Spring2.5.6 Hibernate3.3.1) SSH 框架是一种常用的 Java Web 应用程序框架,它由 Struts、Spring 和 Hibernate 三个框架组成。今天,我们将详细介绍如何配置 SSH 框架,包括...
这本书的第二版,作为"In Action"系列的经典之作,旨在帮助开发者更高效地理解和运用Hibernate技术。 本书的知识点涵盖了以下几个主要部分: 1. Hibernate基础:介绍Hibernate的基本概念,包括ORM思想、项目配置、...
Struts2.1.6、Hibernate3.3.1和Spring2.5.6是Java Web开发中的三个关键框架...提供的"Struts2.1.6+Hibernate3.3.1+Spring2.5.6整合jar包"就是经过验证的无冲突版本,可以直接用于项目中,减少了配置和调试的时间成本。
Struts2.1.6、Spring2.5.6和Hibernate3.3.2是三个在Java Web开发中广泛使用的开源框架,它们分别是MVC框架、IoC/DI容器和对象关系映射(ORM)框架的代表。这些框架的组合在当时是非常流行的,用于构建高效、可扩展和...
在描述中提到的 "struts-2.1.6 项目基础包",通常包含了一系列用于创建 Struts 2 应用的基础组件和依赖库。这些组件和库使得开发者能够快速搭建 Struts 项目,而无需从头开始配置所有必需的依赖。 标签中的 "lib" ...
Struts2、Hibernate和Spring是Java开发中三大主流框架,它们各自解决应用程序的不同问题...总的来说,Struts2.1.6、Hibernate3.3.1和Spring2.5.6的整合是Java EE开发中一个经典的架构模式,至今仍被许多项目所采用。