我整天都在浪费时间试图找出为什么我的DML语句没有被回滚。虽然我已经在互联网上以及在stackoverflow上进行了彻底的搜索 - 但我无法绕过它。
我不是试图通过try catch或@ExceptionHandler或@ControllerAdvice捕获以下异常。无法弄清楚为什么我的查询没有被回滚。这个问题听起来像是重复的,但stackoverflow上的其他帖子都没有解决我的问题
spring.xml
<bean id="employeeImpl" class="org.daoImpl.EmployeeImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
控制器
@RequestMapping(value = "/formSubmit", method = RequestMethod.POST)
public ModelAndView handleForm(@ModelAttribute("employee") Employee employee) {
ModelAndView modelAndView = new ModelAndView("Success");
employeeImpl.insertEmployee(employee);
return modelAndView;
}
最后需要回滚的方法
@Transactional(rollbackFor=RuntimeException.class)
public void insertEmployee(Employee emp) {
String SQL = "insert into employee values(?,?,?,?,?)";
getJdbcTemplate().update(SQL, new Object[] { emp.getId(),emp.getFname());
throw new RuntimeException("I am throwing you out!");
}
我使用MySQL作为我的数据库。
即使抛出运行时异常,插入查询仍然存在于数据库中,它应该回滚到右边吗?有人可以告诉我我错过了什么
答案 0 :(得分:0)
由于桌子的引擎是MyISAM,因此交易没有回滚。这个特殊的引擎不会支持TJ正确指出的交易(我不知道!)
我已将表格的引擎更改为InnoDB,并且事务正按预期回滚。
再次感谢TJ!