我用的是struts1+hibernate+spring,事务的配置在这里面配置<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean><bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">
PROPAGATION_REQUIRED,ISOLATION_DEFAULT,timeout_3000,-Exception
</prop>
<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="submitUpdatePersonInfo">PROPAGATION_NOT_SUPPORTED,-Exception</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly,-Exception</prop>
<prop key="query*">PROPAGATION_REQUIRED,readOnly,-Exception</prop>
<prop key="list*">PROPAGATION_REQUIRED,readOnly,-Exception</prop>
</props>
</property>
</bean>
我在业务逻辑层写一个方法,在spring配置文件里面配置不让
<prop key="submitUpdatePersonInfo">PROPAGATION_NOT_SUPPORTED,-Exception</prop>
spring来管理事务,自己手动控制事务.
这个方法主要是来调用存储过程,根据存储过程的返回值来做判断存储过程是否执行成功.如果存储过程返回为1为成功,其他值就不成功.但是如果是其他值的时候,我想可以回滚这个存储过程里面执行的更新.不知道怎么来实现.hibernatestrutsspring事务存储过程

解决方案 »

  1.   

    baseDao里面的方法public void beginTransaction2() {
    Session session = super.getSession();
    try {
    session.connection().setAutoCommit(false);
    } catch (HibernateException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    session.beginTransaction().begin();
    }
    public void endTransaction2() {
    Session session = super.getSession();
    session.beginTransaction().commit();
    try {
    session.connection().setAutoCommit(true);
    } catch (HibernateException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }public void endTransaction2() {
    Session session = super.getSession();
    session.beginTransaction().rollback();
    try {
    session.connection().setAutoCommit(true);
    } catch (HibernateException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
      

  2.   

    我想在service里面调用存储过程的时候,比如在spring里面配置的没有事务管理,这个时候我就在在事务里面手动控制事务,
    调用dao里面的
    dao.beginTransaction2();dao.endTransaction2();dao.rollbackTransaction2();上面最后的endTransaction2()是这个,用来回滚事务的,但是我调用这个来回滚存储过程好像不行.
      

  3.   


    public void endTransaction2()这个方法改成rollbackTransaction2();这个方法名