[英]spring jpa @transaction doesn't rollback
我的项目遇到了Spring JPA事务不会回滚的问题。 该项目框架是spring MVC + spring + spring data JPA + oracle。 我在Internet上搜索了很多信息,但仍然无法解决我的问题。
我尝试了很多方法,例如将方法设置为public或在@Transactional
添加rollbackFor = Exception.class
,但仍然无法解决。
这是我的代码
调节器
@RequestMapping(value = {"addUser"}, method = RequestMethod.GET)
@ResponseBody
public Boolean insertUser() throws Exception{
User user = new User();
user.setId(10);
userServiceI.addUser(user);
return true;
}
服务
服务介面
public interface UserServiceI {
void addUser(User user);
}
服务实施类
@Service
public class UserService implements UserServiceI {
@Autowired
public UserDao userDao;
@Autowired
PersonService personService;
@Override
@Transactional(propagation= Propagation.REQUIRED,rollbackFor=Exception.class)
public void addUser(User user){
User user1 = userDao.saveAndFlush(user);
System.out.println(1/0);
}
}
道
public interface UserDao extends JpaRepository<User,Integer> {
}
我的@Transactional
方法加载了我的实现类Service,该类写入容易出错的1/0。 我希望错误发生后事务会回滚,但事实并非如此。
添加@Repository
在你的UserDAO可以是错误的可能修复。
不确定,但是它可以工作。
哦,我解决了它,因为我在applicationContext.xml中省略了。 我只写了spring-mvc.xml。 我一直以为我只需要用其中之一写这个。 直到我看到这篇文章labreeze.iteye.com/blog/2359957。 我太高兴了,疏忽了。
如果您在springboot项目上下文中,则必须在配置类中添加@EnableTransactionManagement
如果它是非springboot项目,则在xml配置文件(声明为组件扫描)中添加注释驱动的标签
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.