【发布时间】:2015-04-16 19:03:58
【问题描述】:
我有一个实体User、一个Repository/Dao 类UserDao(使用Spring Data JPA)和一个Service 类UserService,方法addUser 注释为@Transactional :
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void addUser() throws Exception {
User user = new User();
user.setUsername("aaa");
// Save the user, but since this method have the @Transactional
// annotation it should not be committed....
userDao.save(user);
// Forcing an error here I expected that the previous operation
// were rolled back.. Instead the user is saved in the db.
if ("".equals("")) {
throw new Exception("something fails");
}
// Other operations (never executed in this example)
user.setUsername("bbb");
userDao.save(user);
return;
} // method addUser
} // class UserService
UserDao 就是这样:
@Transactional
public interface UserDao extends CrudRepository<User, Long> { }
阅读 Spring Data JPA documentation 和关于同一参数的其他问题(1、2)我的期望是,如果发生错误,标记为 @Transactional 的方法中的每个操作都将被回滚。 .
我做错了什么? 如果发生错误,有没有办法回滚上一个示例中的保存操作?
【问题讨论】:
-
btw CRUD 方法默认是事务性的,因此您不必明确标记您的存储库 - docs.spring.io/spring-data/jpa/docs/1.0.0.M1/reference/html/…
标签: java spring jpa spring-data spring-data-jpa