簡體   English   中英

spring jpa @transaction不回滾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM