由于您正在使用 ,我们可以安全地假设您正在通过Spring,Hibernate或其他JDBC包装器执行数据库操作。这些 JDBC 包装器通常不会引发已检查的异常,它们会引发包装 JDBC 类型的运行时异常。@Transactional
SQLException
@Transactional
设置为仅在需要时引发未选中的异常时才回滚。
考虑这样的用例
@Transactional
public void persistAndWrite(Bean someBean) throws IOException {
// DB operation
getSession().save(someBean);
// File IO operation which throws IOException
someFileService.writeToFile(someBean);
}
您不一定仅仅因为我们无法向文件写入某些内容而回滚数据库操作。
同样地
@Transactional
public void persistAndThrowOutOfMemory(Bean someBean) {
// DB operation
getSession().save(someBean);
// consumes all memory, throws OutOfMemoryError
someService.hugeOperationThrowsOutOfMemoryError();
}
您不一定希望回滚保存的实体,因为某些服务导致消耗了太多内存。
@Transactional
为您提供选项。在适当的情况下使用它。