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

Spring+hibernate集成的session问题

阅读更多
在spring框架和hibernate框架集成的时候,根据不同的需求,或者个人的习惯问题。会出现多种多样的数据访问层的代码。本篇文章拣出几个典型的问题,加以浅谈。

DAO层中的某个类如果没有继承自HibernateDaoSupport。而是使用SessionFactory获取对象。(配置文件中已经配置了sessionFactory对象)。可能使用注解进行了注入。

获取session的方式:

1、sessionFactory.openSession();

该方式获取的session是不受spring管理的,在和数据库交互的过程中,需要手动的打开和关闭事务。并且关于session的问题,还是那个原则“谁创建谁关闭”。意思就是,必须手动关闭session。哪怕你使用了@Transactional注解。

2、sessionFactory.getCurrentSession();

在一不小心的情况下,可能发生一个异常:

org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:622)

第一种方法:

这个时候可以加入spring提供的事务管理机制来改变这个问题。例如加上@Transactional注解,不过事先要在配置文件中定义好。示例如下:

<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory"></property>
</bean>



当然也要引入tx的命名空间。这个时候,不需要显式的开启事务和关闭session的操作,因为spring已经替我们做了。

第二种方法:

如果你不打算让spring来管理事务。你可以在配置文件中,加入:

<prop key="hibernate.current_session_context_class">thread</prop>

要是出现org.hibernate.HibernateException:persist is not valid without active transaction那你就要手动的来开启和关闭事务了。这种情况加入@Transactional注解也是没有作用的。这种情况下session不需要手动关闭。



最后来个小技巧:

如果没有使用spring的组件扫描机制的话,需要在配置文件中配置DAO层的一些类(继承自HibernateDaoSupport)。

其中可能会出现这样的代码:

<bean id="personDao" class="com.dao.PersonDao">

<property name="sessionFactory" ref="sessionFactory" />

</bean>

其中<property name="sessionFactory" ref="sessionFactory" />这个配置,可能会重复N次。

这时候,可以在配置文件中加入:

<bean id="hibernateDaoSupport" abstract="true" class="org.springframework.orm.hibernate3.support.HibernateDaoSupport">

<propery name="sessionFactory" ref="sessionFactory"/>

</bean>

然后再:

<bean id="personDao" class="com.dao.PersonDao" parent="hibernateDaoSupport" />

分享到:
评论

相关推荐

    struts+spring+hibernate实现图书修改和删除

    此外,Spring还可以与Hibernate集成,实现数据访问层的事务管理。 **Hibernate** Hibernate是一个对象关系映射(ORM)框架,它简化了数据库操作,将Java对象和数据库记录进行映射,使得开发者可以使用面向对象的...

    Spring+SpringMVC+hibernate集成jar包

    Spring还包含了对数据库访问的支持,如JDBC抽象层,以及与各种ORM框架(如Hibernate)的集成。此外,SpringMVC是Spring框架的一部分,专为构建Web应用程序提供模型-视图-控制器(MVC)结构。它将业务逻辑、数据和...

    Struts+Spring+Hibernate+WebService集成架构

    **Struts+Spring+Hibernate集成** 这三大框架的集成主要是为了实现更高效、更灵活的企业级应用开发。Struts负责控制流程,Spring提供依赖注入和事务管理,Hibernate则处理数据持久化。Spring可以管理Struts的Action...

    struts+spring+hibernate(mysql)用户登录及文件上传

    总结来说,这个项目展示了如何集成Struts、Spring和Hibernate来构建一个具备用户登录验证和文件上传功能的Web应用。通过Struts处理HTTP请求,Spring管理对象和事务,以及Hibernate处理数据库操作,开发者可以更高效...

    spring mvc + spring + hibernate 全注解整合开发视频教程 12

    Hibernate的Session API提供了CRUD操作,并且支持复杂的查询语句,包括HQL(Hibernate Query Language)和 Criteria API。 在Spring和Hibernate的整合中,Spring可以作为Hibernate的容器,管理SessionFactory和...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...

    ZK+spring+hibernate的整合

    2. **集成Hibernate**:在Spring配置文件中,我们需配置Hibernate的SessionFactory,并利用Spring的JDBC模板或HibernateTemplate进行数据访问。这一步骤包括创建Hibernate的实体类、映射文件以及数据访问接口。 3. ...

    Spring+Hibernate整合

    接下来,要将Hibernate的配置集成到Spring中,这通常涉及到在Spring的配置文件中引入Hibernate的配置文件,如`hibernate.cfg.xml`,其中包含了数据库连接信息、实体类映射等设置。然后,Spring可以通过`...

    Spring+hibernate整合源代码

    1. **依赖注入**:Spring 提供的 DI(Dependency Injection)机制可以帮助管理 Hibernate SessionFactory 和 Session 实例,避免手动创建和管理这些对象。在配置文件中定义 SessionFactory 的 Bean,然后通过注解或 ...

    非注解Springmvc+spring+hibernate 入门实例

    总的来说,这个入门实例旨在帮助初学者理解如何在没有使用注解的情况下,通过XML配置文件集成SpringMVC、Spring和Hibernate,完成一个简单的Web应用。虽然现在的最佳实践倾向于使用注解和Spring Boot,但理解非注解...

    Struts2+Spring+Hibernate集成开发环境的配置小例子

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的组合被称为SSH2。SSH2框架集成可以实现MVC(Model-View-Controller)架构,提供强大的数据持久化、业务逻辑管理和用户界面控制能力。下面我们将详细...

    struts2+spring+hibernate集成

    在"struts2+spring+hibernate集成"中,通常会将Spring作为核心框架,它管理Struts2的Action和Hibernate的SessionFactory。Spring可以将Struts2的Action实例注入到Action类中,同时也可以管理Hibernate的数据访问对象...

    Spring+Hibernate+MySql的应用实例

    在Spring+Hibernate的集成中,Spring可以作为Hibernate的事务管理器,处理事务的开始、提交、回滚等操作。通过SessionFactory和Session接口,Hibernate可以进行对象持久化,将Java对象转换为数据库中的记录。 **...

    strut+spring+hibernate注册登录系统

    这个"Strut+Spring+Hibernate注册登录系统"是一个基础的Web应用程序,旨在帮助初学者理解如何将这三个框架集成并实现用户管理功能。 Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,负责...

    dwr+spring+hibernate模板.zip

    - 整合DWR与Hibernate:DWR可以调用Spring管理的bean,这些bean可以进一步调用Hibernate的Session进行数据库操作。通过这种方式,DWR可以直接与数据库交互,实现动态的数据展示和更新。 总结起来,DWR+Spring+...

    Struts+spring+hibernate 集成实现的经典权限管理系统源代码

    Struts、Spring 和 Hibernate 是Java Web开发中的三大框架,它们的集成使用可以帮助开发者构建高效、模块化且易于维护的企业级应用程序。在这个经典权限管理系统中,这三者协同工作,为系统提供了模型-视图-控制器...

    spring+hibernate

    Spring通过其Transaction Management(事务管理)模块与Hibernate集成,能够提供声明式事务处理,这大大简化了事务控制的复杂性。 描述中的"spring+hibernate spring配置事务"强调了Spring在管理事务方面的关键角色...

    struts+spring+hibernate

    在SSH中,Spring主要负责整个应用的上下文管理,包括对Struts和Hibernate的集成。 Hibernate 是一个对象关系映射(ORM)框架,它简化了数据库操作,将Java对象与数据库表进行映射,通过对象模型处理数据。开发者...

    struts1+spring+hibernate整合所用全部jar包

    Struts1、Spring和Hibernate是Java Web开发中的三大框架,它们各自解决了一部分问题,而将它们整合在一起,可以构建出高效、灵活的企业级应用程序。这里我们主要探讨这三者整合时所需的核心jar包以及它们的功能。 ...

Global site tag (gtag.js) - Google Analytics