zzzzzqiu 2009-07-29 17:34
浏览 204
已采纳

spring+hibernate的事务回滚

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRED"/>
        <tx:method name="find*" read-only="true"/>
    </tx:attributes>
</tx:advice>


<!-- applicationContext.xml哪些类的哪些方法参与事务 -->
<aop:config>
    <aop:pointcut id="allServiceMethod" expression="execution(* com.szhtp.wiki.service.impl.*.*(..))"/>
    <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice"/>
</aop:config>

//以下是com.szhtp.wiki.service.impl.WebAddMeetingServiceImpl.java,是一个webservice
@Service
public class WebAddMeetingServiceImpl implements WebAddMeetingService {
private SimpleHibernateTemplate meetingDao;
private SimpleHibernateTemplate personDao;

@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {

    meetingDao = new SimpleHibernateTemplate<T_ComPhone_Meeting, String>(
            sessionFactory, T_ComPhone_Meeting.class);
    personDao = new SimpleHibernateTemplate<T_ComPhone_Person, String>(
            sessionFactory, T_ComPhone_Person.class);
}
public String addMeeting(String alterdesc,String callername,String callerphone,String callmode,String calltime,
        String centrexid,String department,String hurrytype,String ternaldesc,String ternalday,String inputman,
        String meetaddress,String meetman,String meetname,String meettime,String remark) {                          T_ComPhone_Meeting tcm=new T_ComPhone_Meeting();  
                                tcm.setPersonname(meetmanN);
            meetingDao.saveService(tcm);

        try {List listtel = meetingDao.find(hql1);
        String hql2 = "select id from T_ComPhone_Member where id="+ allperson[i];
            T_ComPhone_Meeting tcm=new T_ComPhone_Meeting();                        personDao.saveService(person);
                    }
                }
            }
            // TODO Auto-generated method stub
  System.out.println("成功添加会议"+"id:"+tcm.getMeetid()+"会议名:"+meetname);
            return "success";

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("会议添加失败");
            return "error";

        }
    }
    return "error";

}

如果在meetingDao.saveService(tcm)之后发生异常,tcm还是会插入到数据库中,怎样才能使他错误回滚呢?
[b]问题补充:[/b]
是只要在方法中catch到运行时异常才回滚,还是要使用throw抛出运行时异常才能回滚?

  • 写回答

3条回答 默认 最新

  • 我不是逗B 2009-07-31 10:39
    关注

    问题补充:
    是只要在方法中catch到运行时异常才回滚,还是要使用throw抛出运行时异常才能回滚?

    如果你是在service这层作的事务,那些是要throw才能回滚。如果你把它catch了,拦截器是抓不到异常的。就不会回滚。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证