`

关于将Hibernate2升级为Hibernate3的基本步骤说明

阅读更多
关于将Hibernate2升级为Hibernate3的基本步骤说明
最近在一个项目开发基本完成进入正式试运行的时候,有了一个想法:将项目的Hibernate2.1升级为Hibernate3。由于公司多年来的技术沉淀,以及整体框架和整个平台的搭建是在去年就已完成了的(主要也是我来设计的),当时出于一个安全(风险方面)的考虑,采用的是Struts 1.2.8+Hibernate 2.1+ Spring 1.2.8。由于我从04以来一直是用这一套,感觉还比较顺手,所以当时就直接给现在这家软件公司设计出了这一套框架……网上也有很多这些文档的说明,但个人觉得都是一些抄来抄去的。所以,现在将我个人的做法分以下八步来给大家说一下,方便更多朋友熟悉一下hibernate2和hibernate3的差别,给当前项目一点扩展的空间。
第一步:换jar包
即将hibernate2.1.jar包换成hibernate3.jar,这一步很简单这里就不具体说了。
第二步:修改Hibernate.cfg.xml文件(由于项目有遗留的原因)这里有部份模块采用的是Struts+Hibernate框架的
即将hibernate.cfg.xml文件中的
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 2.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

改为:

<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

当然如果你是采用的hibernate.properties的方式那也是类似地做一些修改

第三步: 修改ApplicationContext.xml文件 (其实这才是真正使用spring集成hibernate时所用的配置文件)
即将ApplicationContext.xml文件中的sessionFacotry/mySessionFactory Bean的配置做相应的修改。具本如下:
将先前的:
<bean id="mySessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
………</bean>
修改为:
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
………</bean>
第四步:修改事务配置信息 (我个人认为我们应该将每个不同的管理分放到不同的文件中,比如:我这里我是将事务,日志管理以及sessionFactory分开放了,)我这是applicationcontext_transaction.xml文件
即将applicationcontext_transaction.xml文件中的transactionManager 对象的内容做相应的修改:具体如下:
将:
<!--transactionManager-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="mySessionFactory" />
</property>
</bean>

修改为:
<!--transactionManager-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="mySessionFactory" />
</property>
</bean>


第五步:修改xxx.hbm.xml文件
将<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
修改为:
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

第六步:修改java文件中的引入import
将所有程序中的net.sf.hibernate替换为org.hibernate
但是有例外
  net.sf.hibernate.expression.Expression换为org.hibernate.criterion.Expression
  如果用eclipse,用ctrl+shift+o快捷键可以加快速度

第七步:修改一些Hibernate3废弃的方法
在Hibernate3.0中,原来Hibernate2.1的Session接口中的有些基本方法也被废弃,但为了简化升级,这些方法依然是可用的,可以通过org.hibernate.classic.Session子接口来访问它们,例如: 
  
  
  org.hibernate.classic.Session   session=sessionFactory.openSession(); 
  session.delete("delete   from   Customer   "); 
  
  
  在Hibernate3.0中,org.hibernate.classic.Session接口继承了org.hibernate.Session接口,在org.hibernate.classic.Session接口中包含了一系列被废弃的方法,如find()、interate()等。SessionFactory接口的openSession()方法返回org.hibernate.classic.Session类型的实例。如果希望在程序中完全使用Hibernate3.0,可以采用以下方式创建Session实例: 
  
  org.hibernate.Session   session=sessionFactory.openSession(); 
  
  如果是对已有的程序进行简单的升级,并且希望仍然调用Hibernate2.1中Session的一些接口,可以采用以下方式创建Session实例: 
  
  org.hibernate.classic.Session   session=sessionFactory.openSession(); 
  
  在Hibernate3.0中,Session接口中被废弃的方法包括: 
  *   执行查询的方法:find()、iterate()、filter()和delete(String   hqlSelectQuery)   
  *   saveOrUpdateCopy() 
  
  Hibernate3.0一律采用createQuery()方法来执行所有的查询语句,采用DELETE   查询语句来执行批量删除,采用merge()方法来替代   saveOrUpdateCopy()方法。 
  
  
  提示:在Hibernate2.1中,Session的delete()方法有几种重载形式,其中参数为HQL查询语句的delete()方法在Hibernate3.0中被废弃,而参数为Ojbect类型的的delete()方法依然被支持。delete(Object   o)方法用于删除参数指定的对象,该方法支持级联删除。 
  
  Hibernate2.1没有对批量更新和批量删除提供很好的支持,参见<<精通Hibernate>>一书的第13章的

(批量更新和批量删除),而Hibernate3.0对批量更新和批量删除提供了支持,能够直接执行批量更新或批量删除语句,无需把被更新或删除的对象先加载到内存中。以下是通过Hibernate3.0执行批量更新的程序代码: 
  
  Session   session   =   sessionFactory.openSession(); 
  Transaction   tx   =   session.beginTransaction(); 
  
  String   hqlUpdate   =   "update   Customer   set   name   =   :newName   where   name   =  ldName"; 
  int   updatedEntities   =   s.createQuery(   hqlUpdate   ) 
  .setString(   "newName",   newName   ) 
  .setString(   "oldName",   oldName   ) 
  .executeUpdate(); 
  tx.commit(); 
  session.close(); 
  
  以下是通过Hibernate3.0执行批量删除的程序代码: 
  
  Session   session   =   sessionFactory.openSession(); 
  Transaction   tx   =   session.beginTransaction(); 
  
  String   hqlDelete   =   "delete   Customer   where   name   =  ldName"; 
  int   deletedEntities   =   s.createQuery(   hqlDelete   ) 
  .setString(   "oldName",   oldName   ) 
  .executeUpdate(); 
  tx.commit(); 
  session.close();
kypfos    回复于 2005-08-25 11:18:17

分享到:
评论

相关推荐

    hibernate2 升级为hibernate3的需要注意的事项

    本文旨在详细介绍在将项目中的 Hibernate2 升级到 Hibernate3 时需要注意的关键事项,帮助开发者顺利完成升级过程,并充分利用 Hibernate3 的新特性和性能优势。 #### 升级前准备 在正式进行升级前,确保已经下载...

    hibernate 2 升级参考文档

    本文主要讨论从Hibernate 2升级到Hibernate 3的过程中需要注意的关键步骤,这对于使用SSH(Spring、Struts和Hibernate)框架的项目尤其重要。 首先,升级的第一步涉及替换jar包。将旧版本的Hibernate 2.1.jar替换为...

    struts2与hibernate3的完美整合

    这个MyEclipse工程Demo应该包含了一个完整的整合实例,包括了Action、Service、DAO、实体类、配置文件等组成部分,以及详细的说明文档,可以帮助初学者理解和实践Struts2与Hibernate3的整合。通过学习和运行这个示例...

    hibernate 2 安装手记.rar

    通过以上步骤,您已完成Hibernate 2的安装和基本配置。接下来,您可以继续深入学习Hibernate的高级特性,如缓存、事务管理、查询语言(HQL)等,以充分利用这个强大的ORM框架。同时,随着技术的发展,建议您考虑升级到...

    关于struts2+hibernate的小项目

    这个名为"dang01"的压缩包可能包含了项目源代码、配置文件、数据库脚本等相关资源,通过分析这些文件,可以进一步了解该项目是如何将Struts2和Hibernate结合使用的。如果你想要深入学习或理解这个小项目,建议先熟悉...

    struts2和spring和Hibernate整合的jar包

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自解决应用程序的不同问题,而将这三者整合在一起可以构建高效、灵活的企业级应用。Struts2作为MVC(Model-View-Controller)框架,负责处理用户请求...

    struts2+hibernate实现登录及增删改操作

    3. **登录功能实现**:在Struts2和Hibernate结合的项目中,登录功能通常涉及用户输入验证、数据库查询等步骤。首先,用户在前端界面输入用户名和密码,提交到Struts2的Action。Action中,通过Hibernate的Session查询...

    spring3+hibernate4声明式事务配置(xml方式)

    2. **配置Hibernate SessionFactory**:在Spring的XML配置文件(如`applicationContext.xml`)中,你需要定义一个`SessionFactory` bean,它将负责创建和管理Hibernate的Session对象。这通常包括数据库连接参数、...

    Hibernate5.0 jar包

    hibernate5.0jar包,包括:antlr-2.7.7.jar、dom4j-1.6.1.jar、geronimo-jta_1.1_spec-1.1.1.jar、hibernate-commons-annotations-5.0.0.Final.jar、hibernate-core-5.0.0.Final.jar、hibernate-jpa-2.1-api-1.0.0....

    struts+hibernate整合jar包

    整合Struts 2和Hibernate主要是为了让Action可以直接操作数据库,通常步骤包括: 1. **添加依赖**:在项目中引入Struts 2和Hibernate的jar包,确保版本兼容。 2. **配置Struts 2**:在`struts.xml`中配置Action,...

    hibernate5所需jar包

    1. **hibernate-core**: 这是Hibernate的核心模块,包含ORM的基本功能,如实体管理、查询语言(HQL)和事务处理。 2. **hibernate-entitymanager**: 提供了JPA(Java Persistence API)的支持,使得开发者可以选择...

    深入浅出Hibernate源码

    4,将下载的hibernate包解压到x:\rs\hib-samples\hibernate-2.1与x:\rs\hib-samples\hibernate-3,目录结构应该为: x: + rs + hib-samples 本文件包解压的目录 + forum-step1-db-first-middlegen + forum-step1...

    XDoclet2辅助开发hibernate3

    在Hibernate3的上下文中,XDoclet2可以从类和接口的JavaDoc注释中提取信息,然后自动创建对应的Hibernate配置文件,如hibernate.cfg.xml和.hbm.xml文件,极大地提高了开发效率和准确性。 使用XDoclet2的步骤大致...

    hibernate5.3框架环境配置成功代码

    以上就是关于Hibernate 5.3框架环境配置的基本知识点,具体代码示例可能包括数据库连接、实体类创建、配置文件编写、会话工厂和会话的使用等。在实际开发中,你还可以结合日志框架、AOP(面向切面编程)等工具进一步...

    HIbernate免注解实现操作数据库 及Hibernate3连接SQL的BUG解决办法

    首先,让我们了解在Hibernate中免注解实现数据库操作的基本步骤: 1. **配置Hibernate**: 配置`hibernate.cfg.xml`文件,声明数据库连接参数,包括URL、用户名、密码、驱动类等。此外,还需要定义实体类与数据库表...

    贴吧系统,struts2和Hibernate的整合

    在Struts2和Hibernate的整合中,主要涉及以下几个步骤: 1. **依赖添加**:首先在项目的`pom.xml`或`build.gradle`文件中引入Struts2和Hibernate的相关库。 2. **配置Struts2**:配置`struts.xml`文件,定义Action...

    Struts2+Spring2+Hibernate3 web应用示例

    **Hibernate3** 是一个流行的ORM(对象关系映射)框架,它消除了Java代码与SQL之间的直接耦合,将对象模型转换为关系数据库模型,简化了数据持久化的操作。Hibernate3支持HQL(Hibernate Query Language)和Criteria...

    jap+hibernate4实现

    在早期版本中,人们普遍使用Hibernate 3,它是一个功能强大的ORM框架,但在Java社区中,随着JPA 2的引入,越来越多的开发者转向了这个标准的持久化API。本教程将深入探讨如何将JPA与Hibernate 4集成,以利用其更新的...

    struts2 hibernate project

    将Struts2与Hibernate整合,可以让web应用的控制层和持久层更加清晰分离。Action类负责接收用户请求,调用Service层处理业务逻辑,而Service层使用Hibernate与数据库交互。在配置文件中,我们需要定义Action和对应的...

    hibernate最新完整版5.3.0

    确保正确地将这些JAR添加到项目的类路径中是成功使用Hibernate的关键步骤。 3. LGPL许可协议:lgpl.txt文件代表了 Lesser General Public License,这是Hibernate的开源许可协议,允许商业项目使用和修改Hibernate...

Global site tag (gtag.js) - Google Analytics