事务回滚
1.当时需要用到事务回滚,但是看到网上只有问题,没有真实的到底怎么用法。
2.我看了一下文档,结合了网上的大神的博客。
第一种方法:
Db.tx(new IAtom(){
@Override
public boolean run() throw SQLException{
//在这里写要执行的操作,在执行的过程中如果有异常将回滚,如果return false 就也回滚
return true;
}
});
我的代码:
public static void clearScores() { // TODO Auto-generated method stub Db.tx(new IAtom() { //在执行run的过程中,如果有异常将回滚,或者return false 将回滚 @Override public boolean run() throws SQLException { //获取所有的到期用户 List<Associator> assocs = Associator.dao.getAssocsOfScoresExpire(); for( int i = 0 ; i < assocs.size() ; i ++ ){ Associator assoc = assocs.get(i); //在积分明细中写入记录存入 Map map = new HashMap(); map.put("ASSOC_ID",assoc.get(Associator.COLLUMNS.ASSOC_ID)); map.put("CREATED_BY","AUTO"); map.put("DEAL_TYPE","扣除"); map.put("ASSOC_SCORE",assoc.get(Associator.COLLUMNS.ASSOC_SCORE)); map.put("DEAL_REASON","积分到期"); AssociatorScore.dao.saveScore(map); //修改对应的积分和会员的最近签到时间 assoc.set(Associator.COLLUMNS.ASSOC_SCORE, 0); assoc.set(Associator.COLLUMNS.FIRST_SIGN_TIME, Calendar.getInstance().getTime()); assoc.set(Associator.COLLUMNS.MODIFIED_AT, Calendar.getInstance().getTime()); //测试能否回滚 /*if( i == 1) assoc.remove("ID");*/ assoc.update(); } return true; } }); } }
还有一种方式:
声明事务方式:在方法前声明@Before(Tx.class)
注:我试了很多次都不管用,最终发现没有设置拦截器。文档中写的比较清楚。
还有我觉得文档真心的整理的不够,不过实现基础的功能还是可以的。