@Transactional 不回滚

@Transactional not rolling back

我真的浪费了一整天的时间来弄清楚为什么我的 DML 语句没有回滚。尽管我已经在 Internet 和 Whosebug 上进行了彻底的搜索 - 但我无法全神贯注。

我不会尝试通过 try catch 或 @ExceptionHandler 或 @ControllerAdvice 在任何地方捕获以下异常。无法弄清楚为什么我的查询没有回滚。这个问题听起来像是重复的,但 Whosebug 上的其他帖子 none 可以解决我的问题

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 作为我的数据库。

即使在抛出运行时异常之后,插入查询仍然存在于数据库中,应该回滚吧?有人可以告诉我我缺少什么吗

事务没有被回滚,因为 table 的引擎是 MyISAM。这个特定的引擎 支持 TJ 正确指出的交易(我不知道!)

我已将 table 的引擎更改为 InnoDB,事务正在按预期回滚。

再次感谢TJ!