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

项目闹鬼之hibernate2.1.6

阅读更多

项目用的持久化层是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 参考文档.CHM

    hibernate2.1.6中文手册

    《Hibernate 2.1.6 中文手册》是针对Java开发者的重要参考资料,它详细阐述了Hibernate框架在2.1.6版本中的各项功能和用法。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者用面向对象的方式来操作...

    Struts2.1.6 Spring2.5.6 Hibernate3.3.2

    标题 "Struts2.1.6 Spring2.5.6 Hibernate3.3.2" 描述的是一个基于Java的企业级应用程序开发的集成框架,其中包含了三个核心组件:Struts2、Spring和Hibernate。这些组件都是Java Web开发中的关键库,分别负责MVC...

    struts2.1.6+spring2.0+hibernate3.2常用配置包

    MyEclipse8.0中自带的struts2版本是2.1.6,spring版本有2.0,2.5的,hibernate版本较多些至3.2,首先选版本就选择最优的,struts2没的选只有2.1.6版的,所以先导入struts2支持,然后是spring选的是2.0,问题就出在...

    hibernate和struts2.1.6 包

    Struts2和Hibernate是两种非常重要的Java开源框架,它们在Web开发中扮演着核心角色。Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web框架,而Hibernate则是一个对象关系映射(ORM)工具,用于简化...

    基于Spring Boot 2.1.6 RELEASE的Java基础服务项目脚手架设计源码

    本项目是基于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

    根据给定文件的信息,本文将详细介绍如何配置Struts2.1.6、Spring2.0与Hibernate3.1这三个框架的整合开发环境。这是一套经典的MVC(Model-View-Controller)架构组合,适用于构建复杂的Java Web应用程序。 ### 一、...

    Struts2.1.6+Spring2.5.6+Hibernate3.3.2整合包

    Struts2.1.6、Spring2.5.6和Hibernate3.3.2是三个在Java Web开发中广泛使用的开源框架,它们的整合为开发者提供了强大的后端支撑。这个整合包是为了解决企业在构建基于Java的Web应用程序时面临的复杂性问题,通过将...

    ssh struts2.1.6 spring hibernate所有需要的jar包

    在这个压缩包中,包含了这三个框架的特定版本——Struts2.1.6、Spring以及Hibernate的所有必需的JAR文件,使得开发者可以快速地在项目中引入这些框架,而无需逐一查找和添加依赖。 1. **Struts2.1.6**:Struts2是一...

    解决struts2.1.6+spring+hibernate 中文乱码

    对于使用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整合的完整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 整合 在本文中,我们将详细介绍如何将Struts2.1.6、Spring2.5.6以及Hibernate3.3.1进行整合,并构建一个简单的MVC应用。通过这个过程,读者将了解到这三种框架的...

    SSH2 annotation 实现struts2.1.6 spring2.5.6 hibernate3.3 全注解开发

    在这个特定的项目中,开发者选择了SSH2的特定版本:Struts2.1.6、Spring2.5.6和Hibernate3.3,并且强调了全注解开发,这意味着在配置文件中尽可能地使用注解来代替XML配置。 首先,让我们详细了解一下这三个框架的...

    springboot + hibernate + gradle结合使用工程

    springboot + hibernate + gradle结合使用的工程,其中没有swagger定义的model类,但是springboot + hibernate + gradle部分是完全正确的,可供使用着参考

    SSH框架配置步骤图解(Struts2.1.6 Spring2.5.6 Hibernate3.3.1 2

    SSH 框架配置步骤图解(Struts2.1.6 Spring2.5.6 Hibernate3.3.1) SSH 框架是一种常用的 Java Web 应用程序框架,它由 Struts、Spring 和 Hibernate 三个框架组成。今天,我们将详细介绍如何配置 SSH 框架,包括...

    Hibernate实战第2版.zip

    这本书的第二版,作为"In Action"系列的经典之作,旨在帮助开发者更高效地理解和运用Hibernate技术。 本书的知识点涵盖了以下几个主要部分: 1. Hibernate基础:介绍Hibernate的基本概念,包括ORM思想、项目配置、...

    Struts2.1.6+Hibernate3.3.1+Spring2.5.6整合jar包

    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

    Struts2.1.6、Spring2.5.6和Hibernate3.3.2是三个在Java Web开发中广泛使用的开源框架,它们分别是MVC框架、IoC/DI容器和对象关系映射(ORM)框架的代表。这些框架的组合在当时是非常流行的,用于构建高效、可扩展和...

    struts-2.1.6 项目基础包

    在描述中提到的 "struts-2.1.6 项目基础包",通常包含了一系列用于创建 Struts 2 应用的基础组件和依赖库。这些组件和库使得开发者能够快速搭建 Struts 项目,而无需从头开始配置所有必需的依赖。 标签中的 "lib" ...

    Struts2.1.6+Hibernate3.3.1+Spring2.5.6整合jar包.zip

    Struts2、Hibernate和Spring是Java开发中三大主流框架,它们各自解决应用程序的不同问题...总的来说,Struts2.1.6、Hibernate3.3.1和Spring2.5.6的整合是Java EE开发中一个经典的架构模式,至今仍被许多项目所采用。

Global site tag (gtag.js) - Google Analytics