2 u014229472 u014229472 于 2016.03.02 23:35 提问

ssh中事务没有被管理上,总是自动提交

application.xml



<!-- hibernate配置文件 -->


<!--方言-->
${dialect}
<!--显示sql-->
${show_sql}
<!--格式化sql-->
${format_sql}

            <prop key="hibernate.current_session_context_class">${thread}</prop>

            <prop key="hibernate.transaction.factory_class">${transaction}</prop>
        </props>
    </property>
    <property name="mappingResources">
        <list>
            <value>module/test/entity/Test.hbm.xml</value>
            <value>module/tree/entity/SsfFaLocation.hbm.xml</value>
            <value>module/base/user/entity/BaseUser.hbm.xml</value>
        </list>
    </property>
</bean>

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

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Throwable,java.lang.Exception" />
        <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Throwable,java.lang.Exception"/>
        <tx:method name="update*" propagation="REQUIRED"  rollback-for="java.lang.Throwable,java.lang.Exception"/>
        <tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED" />
        <tx:method name="doGet*" propagation="REQUIRED" rollback-for="java.lang.Throwable,java.lang.Exception"/>
        <!--test-->
        <tx:method name="test" propagation="REQUIRED" rollback-for="java.lang.Throwable,java.lang.Exception" />
        <tx:method name="upload*" propagation="REQUIRED" rollback-for="java.lang.Throwable,java.lang.Exception"/>
    </tx:attributes>
</tx:advice>
<!-- 那些类的哪些方法参与事务 -->
<aop:config>
    <!--没切上 只切的到了一个类  execution(* util..*.*(..))
        第二个测试daoImpl   execution(* module.test.dao.DemoDaoImpl.test(..)) or
        -->
    <aop:pointcut id="allServiceMethod" expression="(execution(* module.*.service..*.*(..)) or
                                                     execution(* module.base.*.service.*.*(..))
                                                     )"/>
    <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice"/>
</aop:config>

Test1 t = new Test1();
        t.setTid("656");
        t.setTname("玉兔");
        saveEntity(t);

        Test1 t1 = new Test1();
        t1.setTid("799");
        t1.setTname("bbf");
        saveEntity(t1);
        throw new RuntimeException("报错吧");

public void saveEntity(T o) {
    Assert.notNull(o);
    getHibernateTemplate().saveOrUpdate(o);
    log.info("save entity:"+o);
}

    保存第一条就提交到数据库了 这是怎么回事啊

4个回答

u012216727
u012216727   Ds   Rxr 2016.03.03 08:12

是你理解的有问题。它的事务管理是说它的事务在Dao层执行,离开Dao层就没有了;

qq_20039385
qq_20039385   2016.03.03 09:29


这个才是事物的切面,只有这这个配置的包下的类或类里面的方法才有事物,离开了就没有事物。其中*表示的是通配符

qq_20039385
qq_20039385   2016.03.03 09:30


这个才是事物的切面,只有这这个配置的包下的类或类里面的方法才有事物,离开了就没有事物。其中*表示的是通配符

qq_20039385
qq_20039385 没区别,负责你的,你把事物理解错啦。
2 年多之前 回复
u014229472
u014229472 你写的跟我那个有什么去别啊
2 年多之前 回复
qq_20039385
qq_20039385 csdn好大的bug,我写的<aop:pointcut id="allServiceMethod" expression="(execution(* module.*.service..*.*(..)) or execution(* module.base.*.service.*.*(..)) )"/>不见了
2 年多之前 回复
Royal_lr
Royal_lr   Ds   Rxr 2016.03.03 11:02

保存第一条本来就提交到数据库了,,

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
SSH 配置自动提交事务
今天在配置ssh的时候,在用到工具生成的save()方法时,相应的数据竟然没有保存到数据库。。原因是因为我的事务,没有配置好,按照网上的各种方法试了一遍,最后还是没有解决。于是我决定采用事务自动配置。applicationcontext.xml.中改为<tx:annotation-driven transaction-manager="transactionManager"/> <bean i
SSh save可以自动自动提交, 但是delete,update却不行
烦!烦!烦!  看OA的教学视频 , 首次使用三大框架结合,在hibernate  save可以自动自动提交,但是delete,和update却不行,执行时没报错,但就是没修改数据库数据。使用了sping和hibernate都不知道从何入手,因为spring给你自动提交事务,给你创建session。最后session判断是打开的  但事务就不懂的怎么去看有没有提交了。纠结了好久,在看看老师的视频
SSH2配置事务的两种方式
在介绍Hibernate事务配置之前仍然要先搭建SSH2环境,在前文《Spring整合Struts2中拦截链与注解的使用 》中已经介绍过了Spring与Struts2的整合,接下来我们集成Hibernate需要做的有两件事情,第一加入Hibernate依赖包,第二是在web.xml文件中进行对Hibernate的相关配置。首先来来看需要加入的Hibernate依赖包:          1.a
hibernate事务没有自动提交
最近自己的项目。发现做修改操作时,项目没有报错,但是数据库数据没有修改,结果发现是自己马虎问题导致的。整合一下网络上查来的各种解决方法:session获取方式为:sessionFactory.getCurrentSession()1、可以创建,不能更新、删除。需要手动flush<tx:advice id="txAdvice" transaction-manager="transactionManag
为什么不在ssh的action层做事务处理
首先我们来看下面一段代码,通常我们在action里面必须做异常处理,而在service层直接抛出异常,下面代码的问题是: 1:如果加上了try{}catch代码,spring发现如果异常不能抛出,事务不能实现回滚 ,spring认为没有异常。 2:直接抛出异常,不使用try catch块又不能跳转error页  想两者都兼备该如何处理呀? 当然是把事务声明加载service层
HibernateTemplate 自动事务
使用HibernateTemplate时,不显示的声明事务管理,照样能对数据库做CURD。   这是因为在没有声明事务时,HibernateTemplate是默认自动提交事务的。   因此如果在业务代码中,只涉及到一次数据库操作时默认自动事务提交已经足够,如果多次数据库操作则需要做事务声明。
sql developer默认是不自动提交事务的,如何查询未被提交的事务
select SQL_TEXT,status from v$sql,v$transaction where LAST_ACTIVE_TIME=START_DATE; 上面的语句可以查询未被提交的事务,如果你查询或更新时很长时间没反应,一般是另一个人在操作数据库,例如他发出了更新,取没有提交。sql developer 默认是不自动提交事务的。
ssh框架中事务的声明和两种配置事务的方法
ssh框架中事务的声明和两种配置事务的方法 声明式事务管理: Spring也提供了声明式事务管理。这是通过Spring AOP实现的。 Spring中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的,spring在这段时间内通过拦截
connection.autocommit自动提交事务
在搭建框架时,有时并没有提交事务,但是却希望它提交,那就可以在hibernate.cfg.xml文件中配置 true 即可自动提交事务
坑爹的Spring数据源——自动提交事务
记一次数据源的自动提交事务带来的烦恼,并通过分析找到JBoss JNDI数据源默认自动提交事务的解决方案