在plsql中for update每天都会用上十几次事务管理,java中还是第一次修改。 用的是spring的编程式事物管理,主要事物代码:
this.getTransactionTemplate().execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus arg0) { List acList=(List)delMap.get(Dict.LIST); for (int i = 0; i < acList.size(); i++) { Map oneAcMap=(Map)acList.get(i); ....................................
org.springframework.transaction.support中的 TransactionTemplate有一个重要的方法execute(TransactionCallback action) TransactionCallback。
顾名思义,就是事务回调然后查到TransactionCallback。发现这是一个接口(这也必须是接口,因为任务都是自己具体定义的)
里面只有一个方法:doInTransaction(TransactionStatus status),ransactionStatus,继续顾名思义,也就是事务状态。
对于选中的几张卡会调用一系列捆绑的进行校验和接触关联。然后对主要的表account进行状态修改:
getSqlMap().update("setting.updatedRelaAct", oneAcMap); <update id="updatedRelaAct" parameterClass="java.util.HashMap"> update PACCOUNT set AcState=‘1‘ where AcNo=#AcNo# and BankSeq=#_BankSeq# and CifSeq=#_CifSeq# </update>
以为到这里就结束了?
BankSysRule sendCoreRule=cachedBankRuleAttribute.getResourceWithNull((PerUser) finalContext.getUser(), CONSMSG.RULETYPE_TRSDEF, "RelaActDelete.SendCore"); if(sendCoreRule!=null&&"Y".equals(sendCoreRule.getRuleDef())){//是否把信息提交核心
bankrule中ruledef居然是Y,是谁动了我的数据库?为什么要核心帮我解绑,AcState在我这里,而且我for updated为零后正常显示了。
事物不应该是这样吗?为什么没有try没有回滚 transactionTemplate.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { try { // 数据库操作1 // 数据库操作2 } catch (Exception e) { status.setRollbackOnly(); e.printStackTrace(); } return null; } });