Spring引导@transactional不会回滚

时间:2015-09-12 10:38:28

标签: spring-boot spring-transactions

我正在使用Spring启动并尝试将事务设置为正常工作。

这是我的主要课程:

    @Configuration
@EnableJpaRepositories
@EnableAutoConfiguration
@EnableTransactionManagement
@ComponentScan(basePackages = "com.aa.bb")
public class WebApplication {

    public static void main(String[] args) throws Exception {
       SpringApplication.run(WebApplication.class, args);
    }
}

这是我的服务:

@Service
@Path("/users")
public class UserRestServices {

    @Autowired
    private UserDao userDao;

    @Autowired
    private LogRecordDao logRecordDao;

    @POST
    @Transactional(rollbackFor = Exception.class)
    public String saveUser(User user) {

        userDao.create(user);   
        logUser(user);

        return "SUCCESS";   
    }

    private void logUser(User user) {

        LogRecord log = new LogRecord();

        log.setClassName(this.getClass().getSimpleName());
        log.setText("User was created " + user.getName());
            logRecordDao.create(log);
    }
}

创建用户可以正常工作。

logRecordDao中的logUser是针对异常实现的:

public void create(LogRecord entity) {
    Query query = sessionFactory.getCurrentSession().createSQLQuery("UPDATE AAA SET lll = 3");
    query.executeUpdate();
}   

没有这样的表因此我期待回滚。 没有。

即使发生异常,也会保存用户:

日志:

Hibernate: 
    insert 
    into
        users
        (name, userName) 
    values
        (?, ?)
Hibernate: 
    UPDATE
        AAA 
    SET
        lll = 3
2015-09-12 13:35:28.645  WARN 34974 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1146, SQLState: 42S02
2015-09-12 13:35:28.646 ERROR 34974 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : Table 'db.AAA' doesn't exist

我试图设置@EnableTransactionManagement(mode = AdviceMode.PROXY) 没有工作。

有什么想法吗?

谢谢, ID

0 个答案:

没有答案