当前位置:编程学习 > JAVA >>

ssh框架 如何在ACTION中实现事务管理,出错ROLLBACK

private ActionForward  update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){
        
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
ActionErrors errors = new ActionErrors();
ApplicationContext context = getWebApplicationContext();
IPlancloseService service = (IPlancloseService)context.getBean("PlancloseService");

zzjhfcForm zzForm = (zzjhfcForm) form;
String[] m_mark = zzForm.getRw_mark_yc();
String[] m_jhyf = zzForm.getYearmonth();
String[] m_update = zzForm.getUpdate_mark() ;
String hsql = "{call UP_ZZJHBAK_ORA(?)}";

 for(int i=0;i<m_jhyf.length;i++){
 String mm_value = m_update[i];
 if (mm_value.equals("0") == false){
 String mm_mark = m_mark[i];
 String mm_jhyf = m_jhyf[i];
 Object[] ds = new Object[]{mm_jhyf};

 Session session =getSessionFactory().getCurrentSession();
 Transaction trans=session.beginTransaction();
service.updatefinishmark(mm_jhyf, mm_mark);
try {
service.updatefinishmark(mm_jhyf, mm_mark);
service.zzjhbak_en(hsql, ds);

} catch (SQLException e) {
trans.rollback();
// TODO Auto-generated catch block
e.printStackTrace();

}
trans.commit();

 }
 }
ActionForward forward = mapping.getInputForward();
forward = mapping.findForward("success");
return forward;
}
对底层数据库2个操作 一个是更新字段 一个调用存储过程,如果其中一个报错,2个操作都回滚,具体该怎么写啊 --------------------编程问答-------------------- 在线等,忘高手解答下,最好有具体的实现步骤代码 --------------------编程问答-------------------- lz的写法有什么问题? --------------------编程问答-------------------- Session session =getSessionFactory().getCurrentSession();这段有问题
getSessionFactory()这东西找不到 在ACTION里不识别,在HIBERNATE逆向工程生成的DAO层文件里就识别 --------------------编程问答-------------------- <?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="dataBase" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
            destroy-method="close">
            <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
            <property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.1.58:1521:orcl"></property>
            <property name="user" value="mes"></property>
            <property name="password" value="wzh`751004"></property>
            
            <property name="maxPoolSize" value="120"></property>
            <property name="acquireIncrement" value="5"></property>
            <property name="autoCommitOnClose" value="false"></property>
            <property name="minPoolSize" value="1"></property>
            <property name="initialPoolSize" value="5"></property>
            <property name="maxIdleTime" value="20"></property> 
        </bean>
 
<bean id="sessionBean" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                <property name="dataSource">
                    <ref bean="dataBase" />
                </property>
                <property name="hibernateProperties">
                    <props>
                        <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
                        <prop key="hibernate.show_sql">true</prop>
                    </props>
                </property>

这是Spring的配置文件applicationContext.xml里面的内容 --------------------编程问答-------------------- 你的父类是struts1貌似是ActionServlet他当然没有getSessionFactory()方法了。建议你找Hibernate相关对象来调用吧,应该是个全局的,我不懂ssh的说,错了别骂我啊。 --------------------编程问答-------------------- 你把事务配置在action 不就可以了 --------------------编程问答-------------------- 哪能啊 不过我还是不明白 该怎么弄 再等等别人的回答吧 谢谢你啊 --------------------编程问答--------------------
引用 6 楼 dikeboy1234 的回复:
你把事务配置在action 不就可以了

有没有具体点的东西啊 我如果知道怎么配置事务 我就不问了 --------------------编程问答-------------------- getSessionFactory()  把这个方法拿出来看下 --------------------编程问答--------------------
引用 9 楼 scrack 的回复:
getSessionFactory() 把这个方法拿出来看下

。。。。。。。。。。。。。。。。。。。。。。。。没有啊 我根本没写啊 我那是直接从DAO文件里面拷贝过来的 在DAO文件里面那个getSessionFactory()直接可以用啊 --------------------编程问答-------------------- 你不是用Sring 吗  看说明文档啊  ,转到配置事务那段 直接复制下来 改下就好了  学会自己看文档啊 ,SSH文档那么齐全
引用 8 楼 liubaomin19840130 的回复:
引用 6 楼 dikeboy1234 的回复:
你把事务配置在action 不就可以了

有没有具体点的东西啊 我如果知道怎么配置事务 我就不问了
--------------------编程问答-------------------- 第一,你代码写法有问题,trans.commit();应写在try块内部,如下面那样。
Session session =getSessionFactory().getCurrentSession();
Transaction trans=session.beginTransaction();
service.updatefinishmark(mm_jhyf, mm_mark);
try {
service.updatefinishmark(mm_jhyf, mm_mark);
service.zzjhbak_en(hsql, ds);
trans.commit();
} catch (SQLException e) {
trans.rollback();
// TODO Auto-generated catch block
e.printStackTrace();

}

第二,Session session =getSessionFactory().getCurrentSession();
你的错是什么你也没有贴出来,我觉得最有可能就是这个地方了吧,getSessionFactory是你自定义的方法?还是怎么的?你看下这个方法写法有没有错误,还有你导入包有没有问题。仔细检查检查吧,希望你能解决问题。 --------------------编程问答-------------------- http://www.cnblogs.com/bingoidea/archive/2011/04/01/2002200.html
你说的基本应该是这个东西,我放上也不怎么好用,基本有些就看不懂 --------------------编程问答--------------------
引用 12 楼 jun921373786 的回复:
第一,你代码写法有问题,trans.commit();应写在try块内部,如下面那样。
Session session =getSessionFactory().getCurrentSession();
Transaction trans=session.beginTransaction();
service.updatefinishmark(mm_jhyf, mm_mark);
try ……

Session session =getSessionFactory().getCurrentSession();
没有啊 我根本没写啊 我那是直接从DAO文件里面拷贝过来的 在DAO文件里面那个getSessionFactory()直接可以用啊
--------------------编程问答-------------------- 还有没有人 帮我实现下啊 最好有步骤方法代码的 --------------------编程问答-------------------- getSessionFactory() 因为DAO extends hibernateDaoSupport这个类,但是你的action好像应该继承了别的类吧,
给点建议, 你既然用SSH , 那就吧Action的功能拆分出来吧,

你让spring管理事物,  切面定义在action中就OK了   --------------------编程问答-------------------- 切面定义在action中就OK了  --------------------编程问答--------------------
引用 16 楼 jiangc198745 的回复:
getSessionFactory() 因为DAO extends hibernateDaoSupport这个类,但是你的action好像应该继承了别的类吧,
给点建议, 你既然用SSH , 那就吧Action的功能拆分出来吧,

你让spring管理事物, 切面定义在action中就OK了

具体怎么做呢 
我想要具体的实现方法啊 --------------------编程问答-------------------- 使用注解式事物:
1、在action类要使用事物的方法上加上:@Transactional
2、在applicationContext.xml中配置:

<!-- 配置Hibernate 的事务管理'-->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="mySessionFactory" />
</property>
</bean>

<!-- tx:annotation-driven元素的出现 开启 了事务行为 -->
<tx:annotation-driven transaction-manager="txManager" /> --------------------编程问答-------------------- 追加一下:
在applicationContext.xml头文件中,引入:
1<?xml version="1.0" encoding="UTF-8"?>  
2.<beans  
3.    xmlns:tx="http://www.springframework.org/schema/tx"   
4.    http://www.springframework.org/schema/tx    
--------------------编程问答-------------------- <bean id="dataBase" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
            destroy-method="close">
            <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
            <property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.1.58:1521:orcl"></property>
            <property name="user" value="mes"></property>
            <property name="password" value="wzh`751004"></property>
            
            <property name="maxPoolSize" value="120"></property>
            <property name="acquireIncrement" value="5"></property>
            <property name="autoCommitOnClose" value="false"></property>
            <property name="minPoolSize" value="1"></property>
            <property name="initialPoolSize" value="5"></property>
            <property name="maxIdleTime" value="20"></property> 
        </bean>
        <bean id="transactionManager"     
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="sessionBean"/>   
    </bean>  
 
<bean id="sessionBean" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                <property name="dataSource">
                    <ref bean="dataBase" />
                </property>
                <property name="hibernateProperties">
                    <props>
                        <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
                        <prop key="hibernate.show_sql">true</prop>
                    </props>
                </property>

怎么会报错呢 --------------------编程问答-------------------- <?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
xmlns:tx="http://www.springframework.org/schema/tx">

<bean id="dataBase" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
            destroy-method="close">
            <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
            <property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.1.58:1521:orcl"></property>
            <property name="user" value="mes"></property>
            <property name="password" value="wzh`751004"></property>
            
            <property name="maxPoolSize" value="120"></property>
            <property name="acquireIncrement" value="5"></property>
            <property name="autoCommitOnClose" value="false"></property>
            <property name="minPoolSize" value="1"></property>
            <property name="initialPoolSize" value="5"></property>
            <property name="maxIdleTime" value="20"></property> 
        </bean>
        <bean id="transactionManager"     
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="dataBase"/>   
    </bean>  
    <tx:annotation-driven transaction-manager="txManager" />
 
<bean id="sessionBean" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                <property name="dataSource">
                    <ref bean="dataBase" />
                </property>
                <property name="hibernateProperties">
                    <props>
                        <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
                        <prop key="hibernate.show_sql">true</prop>
                    </props>
                </property>
出错<tx:annotation-driven transaction-manager="txManager" />
前面有红叉 --------------------编程问答--------------------
引用 19 楼 xylisong 的回复:
使用注解式事物:
1、在action类要使用事物的方法上加上:@Transactional
2、在applicationContext.xml中配置:

<!-- 配置Hibernate 的事务管理'-->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager……

我的情形跟你的有点不一样 我的HIBERNATE让SPRING托管了 所以写的方式跟你的有点差别 不过我看意思也差不多 为什么不好用呢 --------------------编程问答-------------------- 我发的就是spring集成hibernate的,出现红叉,说明,你的spring配置文件头有问题,正确的应该是:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
          http://www.springframework.org/schema/beans            
          http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
          http://www.springframework.org/schema/tx   
          http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
          http://www.springframework.org/schema/aop  
          http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
     > --------------------编程问答--------------------
引用 24 楼 xylisong 的回复:
我发的就是spring集成hibernate的,出现红叉,说明,你的spring配置文件头有问题,正确的应该是:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchem……
红叉问题解决了 如果我SPRING托管HIBERNATE的话 该如何写呢 我发个 你仔细帮我看看 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">


<bean id="dataBase" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
            destroy-method="close">
            <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
            <property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.1.58:1521:orcl"></property>
            <property name="user" value="mes"></property>
            <property name="password" value="wzh`751004"></property>
            
            <property name="maxPoolSize" value="120"></property>
            <property name="acquireIncrement" value="5"></property>
            <property name="autoCommitOnClose" value="false"></property>
            <property name="minPoolSize" value="1"></property>
            <property name="initialPoolSize" value="5"></property>
            <property name="maxIdleTime" value="20"></property> 
        </bean>
        <bean id="transactionManager"     
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="dataBase"/>   
    </bean> 
     <tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="sessionBean" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                <property name="dataSource">
                    <ref bean="dataBase" />
                </property>
                <property name="hibernateProperties">
                    <props>
                        <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
                        <prop key="hibernate.show_sql">true</prop>
                    </props>
                </property>
<property name="mappingResources">
<list>
                <value>com/king/krs/pojo/TUser.hbm.xml</value>
<list>
</property>
</bean>
<bean id="UserDAO" class="com.king.krs.dao.impl.UserDAO">
<property name="sessionFactory">
<ref bean="sessionBean" />
</property>
</bean>
我这么写的 在ACTION中方法前面也加上@Transactional了 为什么就不行呢 还是能修改,第一方法修改数据库正确,第二个方法调用存储过程错误,为什么没回滚呢 --------------------编程问答-------------------- 这个是ACTION中的方法

@Transactional
    private ActionForward  update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){
        
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
ActionErrors errors = new ActionErrors();
ApplicationContext context = getWebApplicationContext();
IPlancloseService service = (IPlancloseService)context.getBean("PlancloseService");

zzjhfcForm zzForm = (zzjhfcForm) form;
String[] m_mark = zzForm.getRw_mark_yc();
String[] m_jhyf = zzForm.getYearmonth();
String[] m_update = zzForm.getUpdate_mark() ;
String hsql = "{call UP_ZZJHBAK_ORA(?)}";

 for(int i=0;i<m_jhyf.length;i++){
 String mm_value = m_update[i];
 if (mm_value.equals("0") == false){
 String mm_mark = m_mark[i];
 String mm_jhyf = m_jhyf[i];
 Object[] ds = new Object[]{mm_jhyf};
    ///stest s = new stest();
//Session session = s.getsession();
// Transaction trans=session.beginTransaction();


try {
service.updatefinishmark(mm_jhyf, mm_mark);
service.zzjhbak_en(hsql, ds);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//trans.commit();


 }
 }
ActionForward forward = mapping.getInputForward();
forward = mapping.findForward("success");
return forward;
}
     --------------------编程问答-------------------- 哥们 帮我仔细看看上面哪有问题 我再追加点分 全给你  --------------------编程问答-------------------- SessionFactory mySessionFactory = new Configuration().configure(
"hibernate.cfg.xml").buildSessionFactory();

你懂的 --------------------编程问答-------------------- 将你spring配置文件中的:
 <bean id="transactionManager"   
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataBase"/>   
  </bean>  

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

替换为:
<!-- 配置Hibernate 的事务管理'-->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionBean" />
</property>
</bean>

<!-- tx:annotation-driven元素的出现 开启 了事务行为 -->
<tx:annotation-driven transaction-manager="txManager" />

加载顺序,这两个替换内容,应该放到spring配置文件末尾 --------------------编程问答-------------------- --------------------编程问答-------------------- 追加:
在spring配置文件中已经配置好了事物,那么,在action类的方法中,直接注入:@Transactional
就行了,不需要显式的去操作事物。commit,rollback等,全部去掉,以前是怎么写action方法的,就怎么写。 --------------------编程问答--------------------
引用 28 楼 mrsfeng 的回复:
SessionFactory mySessionFactory = new Configuration().configure(
"hibernate.cfg.xml").buildSessionFactory();

你懂的


我的项目中根本就没有hibernate.cfg.xml这个文件 --------------------编程问答--------------------
引用 31 楼 xylisong 的回复:
追加:
在spring配置文件中已经配置好了事物,那么,在action类的方法中,直接注入:@Transactional
就行了,不需要显式的去操作事物。commit,rollback等,全部去掉,以前是怎么写action方法的,就怎么写。

还是没好用啊 是不是因为我第一次是修改数据库,第二次是调用的存储过程的问题。 --------------------编程问答-------------------- <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans  
  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-2.5.xsd
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">


<bean id="dataBase" class="com.mchange.v2.c3p0.ComboPooledDataSource"  
  destroy-method="close">
  <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
  <property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.1.58:1521:orcl"></property>
  <property name="user" value="mes"></property>
  <property name="password" value="wzh`751004"></property>
    
  <property name="maxPoolSize" value="120"></property>
  <property name="acquireIncrement" value="5"></property>
  <property name="autoCommitOnClose" value="false"></property>
  <property name="minPoolSize" value="1"></property>
  <property name="initialPoolSize" value="5"></property>
  <property name="maxIdleTime" value="20"></property>  
  </bean>
  <bean id="transactionManager"   
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataBase"/>   
  </bean>  
  <tx:annotation-driven transaction-manager="transactionManager"/> 
<bean id="sessionBean" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
  <ref bean="dataBase" />
  </property>
  <property name="hibernateProperties">
  <props>
  <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
  <prop key="hibernate.show_sql">true</prop>
  </props>
  </property>
<property name="mappingResources">
<list>
  <value>com/king/krs/pojo/TUser.hbm.xml</value>
<list>
</property>
</bean>
<bean id="UserDAO" class="com.king.krs.dao.impl.UserDAO">
<property name="sessionFactory">
<ref bean="sessionBean" />
</property>
</bean>
我这么写的 在ACTION中方法前面也加上@Transactional了 为什么就不行呢 还是能修改,第一方法修改数据库正确,第二个方法调用存储过程错误,为什么没回滚呢

这个是ACTION中的方法

@Transactional
  private ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){
    
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
ActionErrors errors = new ActionErrors();
ApplicationContext context = getWebApplicationContext();
IPlancloseService service = (IPlancloseService)context.getBean("PlancloseService");

zzjhfcForm zzForm = (zzjhfcForm) form;
String[] m_mark = zzForm.getRw_mark_yc();
String[] m_jhyf = zzForm.getYearmonth();
String[] m_update = zzForm.getUpdate_mark() ;
String hsql = "{call UP_ZZJHBAK_ORA(?)}";
有空的帮我看下 问题出在哪了 --------------------编程问答--------------------
引用 34 楼 liubaomin19840130 的回复:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans  
  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-2.5.xsd
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">


<bean id="dataBase" class="com.mchange.v2.c3p0.ComboPooledDataSource"  
  destroy-method="close">
  <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
  <property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.1.58:1521:orcl"></property>
  <property name="user" value="mes"></property>
  <property name="password" value="wzh`751004"></property>
    
  <property name="maxPoolSize" value="120"></property>
  <property name="acquireIncrement" value="5"></property>
  <property name="autoCommitOnClose" value="false"></property>
  <property name="minPoolSize" value="1"></property>
  <property name="initialPoolSize" value="5"></property>
  <property name="maxIdleTime" value="20"></property>  
  </bean>
  <bean id="transactionManager"   
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataBase"/>   
  </bean>  
  <tx:annotation-driven transaction-manager="transactionManager"/> 
<bean id="sessionBean" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
  <ref bean="dataBase" />
  </property>
  <property name="hibernateProperties">
  <props>
  <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
  <prop key="hibernate.show_sql">true</prop>
  </props>
  </property>
<property name="mappingResources">
<list>
  <value>com/king/krs/pojo/TUser.hbm.xml</value>
<list>
</property>
</bean>
<bean id="UserDAO" class="com.king.krs.dao.impl.UserDAO">
<property name="sessionFactory">
<ref bean="sessionBean" />
</property>
</bean>
我这么写的 在ACTION中方法前面也加上@Transactional了 为什么就不行呢 还是能修改,第一方法修改数据库正确,第二个方法调用存储过程错误,为什么没回滚呢

这个是ACTION中的方法

@Transactional
  private ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){
    
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
ActionErrors errors = new ActionErrors();
ApplicationContext context = getWebApplicationContext();
IPlancloseService service = (IPlancloseService)context.getBean("PlancloseService");

zzjhfcForm zzForm = (zzjhfcForm) form;
String[] m_mark = zzForm.getRw_mark_yc();
String[] m_jhyf = zzForm.getYearmonth();
String[] m_update = zzForm.getUpdate_mark() ;
String hsql = "{call UP_ZZJHBAK_ORA(?)}";
有空的帮我看下 问题出在哪了


我也有类似跟你一样的需求, 你问题解决了吗?
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,