`
fantlam
  • 浏览: 99026 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

我的SSH项目之旅(11.Spring事务解决Session)

阅读更多

关于spring事务配置

这个问题从一开始困扰了我很久,主要是因为使用HibernateTemplate的时候发生'readOnly的问题。之前查了很多资料,都说用spring事务配置可以解决,但之前我都一直没成功。昨天一试,有效果了。

 

 

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

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

    </bean>

 

 

    <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">

       <!-- 事务拦截器bean需要依赖注入一个事务管理器 -->

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

       <property name="transactionAttributes">

           <!--  下面定义事务传播属性-->

           <props>

              <prop key="*">PROPAGATION_REQUIRED</prop>

           </props>

       </property>

    </bean>

 

    <!-- 定义BeanNameAutoProxyCreator-->

    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

    <!-- 指定对满足哪些bean namebean自动生成业务代理 -->

        <property name="beanNames">

            <!-- 下面是所有需要自动创建事务代理的bean-->

            <list>

                <value>consumerdaoimpl</value>

            </list>

            <!-- 此处可增加其他需要自动创建事务代理的bean-->

        </property>

        <!--  下面定义BeanNameAutoProxyCreator所需的事务拦截器-->

        <property name="interceptorNames">

            <list>

                <value>transactionInterceptor</value>

                <!-- 此处可增加其他新的Interceptor -->

            </list>

        </property>

</bean>

注:PROPAGATION_REQUIRED表示在目前的事务中执行操作,如果事务不存在就建立一个新的事务

这种配置用的是BeanNameAutoProxyCreate创建代理,但它不一定是创建事务代理,关键在传入的拦截器,如果传入的是事务拦截器,将可自动生成事务代理。如果有更多目标的bean需要自动创建事务代理则可以感受到这种配置的优势,因为只需简单增加一行就可以了。

这样配置之后解决了我之前那些关于session引发的很多问题。

网上说,使用HibernateTemplate操作才能参与到spring事务,而用getSession()拿到Session操作的则没有,有时候我用的时候总发现插入不了数据等问题,似乎是因为事务提交问题。

 

 

 

新的发现

以前写的代码中有时候用getSession().save()方法总出现没报错但又插入不了数据,一开始我总以为是什么包冲突。原来是没事务提交,这点我应该早猜到才是的。

getHibernateTemplate().save(o)这种方法已经交给spring去处理事务提交了,所以可以直接使用,而用getSession().save()就要注意手动提交事务。

    public void insert(Object o) throws Exception {

        Session session = this.getSession();

       Transaction t = session.beginTransaction();

       session.save(o);

       t.commit();

       // this.getHibernateTemplate().save(o);

    }

对这个相关问题的认识在进一步加深中,以后有空要去看看相关资料才行

1
0
分享到:
评论

相关推荐

    Java(通过ganymed-ssh2-build210.jar)实现SSH远程连接linux终端

    Java通过ganymed-ssh2-build210.jar库实现SSH远程连接Linux终端是一个常见的应用场景,主要用于自动化运维、系统管理或者开发过程中需要与Linux服务器交互的场景。ganymed-ssh2-build210.jar是Java的一个开源SSH库,...

    基于IDEA的SSH项目之二:配置Spring一(第四步结束时的程序包)

    在SSH项目中,Spring主要负责管理Bean的生命周期,整合其他框架,以及提供事务管理。 5. **Spring配置**:配置Spring涉及创建`beans.xml`或`applicationContext.xml`文件,定义Bean的实例化、属性注入、以及它们...

    myeclipse新建SSH项目的步骤struts2+spring+hibernate

    下面我们将详细讲解如何在MyEclipse中创建一个SSH项目,并涉及Spring的编码过滤、Servlet session超时设置以及Spring事务管理器的另一种用法。 1. **MyEclipse新建SSH项目**: - 打开MyEclipse,选择“File” -&gt; ...

    基于struts+spring+hibernate+oracle的移动ssh项目源码

    基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh...

    基于IDEA的SSH项目之二:配置Spring一---程序包

    在构建基于IDEA的SSH(Struts、Spring、Hibernate)项目时,Spring框架的配置是整个应用程序的核心部分。本文将详细讲解如何在IntelliJ IDEA(IDEA)中配置Spring,以便于理解并掌握SSH集成开发环境下的Spring配置...

    spring_MVC源码

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...

    springssh 我上培训班时spring框架搭建课件

    根据提供的文件信息,我们可以深入解析Spring、Struts2以及Hibernate(简称SSH)的集成应用,这一组合常被称为SSH框架,是Java企业级应用开发中的经典架构之一。 ### Spring框架的搭建与整合 #### 1\. Spring与...

    SSH三大框架整合 struts2(使用xml配置)+hibernate(使用xml配置)+spring(使用xml配置)

    SSH是Java Web开发中的三个重要框架,分别是Struts2、Hibernate和Spring,它们共同构建了一个强大的MVC(Model-View-Controller)架构。本项目整合了这三个框架,并使用XML配置来管理各个组件,实现了基本的CRUD...

    step by step ssh 04 Spring 事务控制

    在"step by step ssh 04 Spring 事务控制"这一主题中,我们将深入探讨如何在SSH架构下实现Spring的AOP(面向切面编程)事务管理,以及如何结合Struts和Hibernate进行用户登录实例。 首先,Struts作为MVC(模型-视图...

    JSP源码——移动ssh项目(struts+spring+hibernate+oracle).zip

    《深入解析JSP SSH项目:基于Struts、Spring和Hibernate的移动应用开发》 SSH(Struts、Spring、Hibernate)是Java开发中的经典MVC框架组合,尤其在企业级应用中广泛使用。在这个名为“移动ssh项目”的源码中,我们...

    SSH Maven项目struts2.3.24+spring4.2.4.RELEASE+hibernate5.0.6.Final

    SSH Maven项目是一个基于Java的Web开发框架,由Struts2、Spring和Hibernate三大组件组成,分别负责表现层、业务逻辑层和服务数据访问层。在这个项目中,使用的版本是Struts2.3.24、Spring4.2.4.RELEASE和Hibernate...

    ssh开源框架.....

    SSH开源框架,全称为Struts2、Spring和Hibernate的组合,是Java开发中常见的Web应用框架。这个框架集合了三个强大的组件,旨在提供一个高效、灵活且可扩展的开发环境,帮助开发者快速构建企业级应用。Spring MVC是...

    Java项目之移动ssh项目(struts+spring+hibernate+oracle)源代码

    这个"Java项目之移动SSH项目"提供了使用这些技术构建的完整应用源代码,对于学习和理解SSH框架集成以及移动开发有着极大的帮助。以下是这些技术的详细说明: 1. **Struts2**:Struts2是一个基于MVC(Model-View-...

    ssh helps Struts1.1.chm Hibernate.chm Spring.chm

    SSH,全称是Struts + Spring + Hibernate,是Java Web开发中的一个经典组合,被誉为“企业级应用开发的黄金三角”。这个SSH_3_helps.rar压缩包包含了对这三个框架的详细指南,以CHM(Compiled Help Manual)格式提供...

    SSH整合的jar包.zip

    SSH整合是指Spring、Struts和Hibernate这三大开源框架的集成应用。这三种框架分别负责不同的职责:Spring作为应用的管理核心,提供依赖注入(DI)和面向切面编程(AOP);Struts则主要处理MVC(模型-视图-控制器)...

    SSH项目(hibernate+spring+struts)

    在SSH项目中,Spring作为整个应用的“粘合剂”,管理对象的生命周期,负责配置和连接数据库、事务管理以及服务层和控制层之间的通信。 3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它简化了Java...

    ssh整合所需包......

    在SSH整合中,Spring主要负责管理对象(如Struts2的Action和Hibernate的Session)的生命周期和装配,以及事务管理。 1. **依赖注入(DI)**:通过配置文件或注解来管理对象及其依赖关系,降低了对象之间的耦合度。 ...

    spring使用心得 java ssh

    SSH(Spring、Struts、Hibernate)是Java Web开发的经典组合,这个压缩包中包含了一些关于Spring在实际使用过程中的心得和常见问题的解决方案。 首先,"spring的事务代理.txt"可能涉及到Spring的事务管理。Spring...

    基于SSH的家政服务系统.rar

    标题“基于SSH的家政服务系统.rar”表明这是一个关于使用SSH(Struts2 + Spring + Hibernate)技术栈开发的家政服务管理系统。SSH是Java Web开发中的经典组合,用于构建MVC模式的Web应用程序。 首先,Struts2是...

    SSH项目搭建步骤简单示例

    添加 Spring 支持是 SSH 项目搭建的第二步。在添加 Spring 支持时,需要右键点击项目,选择添加 Spring 3 支持,并选择要添加的类库。在这里,我们选择了 Spring 3.0 Web Libraries。 添加 Hibernate 支持 添加 ...

Global site tag (gtag.js) - Google Analytics