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