在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;
}
});