spring jpa @transaction不回滚

时间:2019-02-12 09:00:16

标签: java jpa

我的项目遇到了Spring JPA事务不会回滚的问题。该项目框架是spring MVC + spring + spring data JPA + oracle。我在Internet上搜索了很多信息,但仍然无法解决我的问题。

我尝试了许多方法,例如将方法设置为public或在rollbackFor = Exception.class中添加@Transactional,但仍然无法解决。

这是我的代码

控制器

@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。我希望错误发生后事务会回滚,但是不会。

3 个答案:

答案 0 :(得分:2)

在您的 UserDao 中添加@Repository可以解决该错误。
不确定,但是可以。

答案 1 :(得分:0)

哦,我解决了它,因为我在applicationContext.xml中省略了它。我只写了spring-mvc.xml。我一直以为我只需要用其中之一写这个。直到我看到这篇文章labreeze.iteye.com/blog/2359957。我太高兴了,疏忽了。

答案 2 :(得分:-1)

如果您在springboot项目上下文中,则必须在配置类中添加@EnableTransactionManagement

如果它不是非springboot项目,则在xml配置文件(声明为组件扫描)中添加注释驱动的标记