SSH事务问题 讨论

2019-03-25 13:46|来源: 网路

大家好,请注意一下这里。
我用struts+hibernate+spring,做了一个项目,但是对事务有点不明白,希望能得到正解。

我按spring的要求,在xml文件中配置了事务需要配置的信息,同时在web.xml中增加了OpenSessionInViewFilter,我的service类有两个方法,一个是save,一个是update,我在一个action方法中先后调用save再调update,但是update方法报出异常时,save方法的内容还是到了数据库中,这是怎么回事,不是说spring的事务控制是以service(即一个service类)为单元吗?为什么我调用同一个类中的两个方法,事务不一样呢?
<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager"><ref bean="transactionManager"></ref></property>
        <property name="proxyTargetClass"><value>true</value></property>
        <property name="target"><ref bean="commonService"></ref></property>
        <property name="transactionAttributes">
            <props>
                <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
                <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
                <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
                <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
                <prop key="batchInsert*">PROPAGATION_REQUIRED</prop>
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>
    </bean>

相关问答

更多
  • 有很多的。 比如黑基、华盟、饭客 我比较常猎鹰 www.bbs.lyhack.net 可以去看看,有很多电脑技术问题,也有解答专人。
  • www.yuanLv.net远虑电脑培训在线视频教程网上有很多郎咸平的讲座!
  • www.yuanLv.net远虑电脑培训在线视频教程网上有很多郎咸平的讲座!
  • 无论是JAVAEE JAVAME JAVASE 我觉得理解面向对象是最重要的,我想这个就是面向对象,为什么会有装箱和拆箱,为什么所有类型都可以转换成object类型的解释吧
  • Spring的事务机制是透明的,不需要去调用。如果真的要手动调用的话,可以使用TransactionTemplate提供的方法,具体见Spring的Reference: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#tx-prog-template
  • 我告诉你一个办法,一定可以做出阵列: 要点是: 第一次在做要阵列的FEATURE时,在选取绘图平面时,选择 top 或者 bottom 平面时,不要用缺省的DTM平面,用自定义平面 (make datum),此自定义平面用与缺省平面成一定角度且过轴心的平面产生,这样再做,应该就OK了,试试吧
  • 切面就是把每个功能模块里面公用的方法提取出来,为了代码复用,不用在每个功能模块里都写,如权限控制,事务管理等。对于你的问题,切面切进去了,就会执行切面的代码,没有切进去那就不执行。若果切面对原来的代码没有影响,那切不切进去都没有影响,如果有影响,如权限控制,如果切进去,然后没有权限,那代码就不执行。
  • 切面就是把每个功能模块里面公用的方法提取出来,为了代码复用,不用在每个功能模块里都写,如权限控制,事务管理等。对于你的问题,切面切进去了,就会执行切面的代码,没有切进去那就不执行。若果切面对原来的代码没有影响,那切不切进去都没有影响,如果有影响,如权限控制,如果切进去,然后没有权限,那代码就不执行。
  • 这个能明确一下吗?比如query*, 再看看这个方法里面调用其他的事务方法没。
  • 问题出现在行 - user_says.set(input_get + "\n\n") ia_says.set(ia_answers) 您将替换users_says.set() , ia_says.set()将使用新值重置完整的标签。 相反,您应该获取旧值并将新值附加到它并将其设置回来,示例 - user_says.set(user_says.get() + input_get + "\n") ia_says.set(ia_says.get() + ia_answers + "\n") 或者您也可以为每个 ...