有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpringJPA@transaction不会回滚

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

我尝试了很多方法,例如将方法设置为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方法加载我的实现类服务,它编写一个容易出错的1/0。我希望事务在出错后回滚,但事实并非如此


共 (3) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    UserDao中添加@Repository可能会修复该错误
    不确定,但它可以工作

  3. # 3 楼答案

    哦,我解决了它,因为我在应用上下文中省略了。xml。我只在SpringMVC上写过。xml。我一直认为我只需要在其中一个上面写下这个。直到我看到这篇文章的标签。伊提耶。com/blog/2359957。我太高兴了,太疏忽了