我正在使用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