事务控制
示例:
// move data from temp_table to work_table
try {
sqlMapClient.startTransaction();
T03SlipWk orderForm = (T03SlipWk) session.get( "SLIP_WK" );
moveOrderFormToWorkTable( orderForm.getSlipId() );
moveProductsToWorkTable( orderForm.getSlipId() );
deleteProductsInTempTable( orderForm.getSlipId() );
deleteOrderFormInTempTable( orderForm.getSlipId() );
sqlMapClient.commitTransaction();
}
catch( SQLException e){
LOG.error( e );
return ERROR;
}
finally{
sqlMapClient.endTransaction();
}
// delete datas from T03 by slipId
void deleteOrderFormInTempTable( String slipId ) throws SQLException {
assert slipId != null;
T03SlipWkDAO dao = new T03SlipWkDAOImpl( sqlMapClient );
T03SlipWkExample example = new T03SlipWkExample();
T03SlipWkExample.Criteria criteria = example.createCriteria();
criteria.andSlipIdEqualTo( slipId );
dao.deleteByExample( example );
}
// delete datas from T04 by slipId
void deleteProductsInTempTable( String slipId ) throws SQLException {
assert slipId != null;
T04CaseDtlWkDAO dao = new T04CaseDtlWkDAOImpl( sqlMapClient );
T04CaseDtlWkExample example = new T04CaseDtlWkExample();
T04CaseDtlWkExample.Criteria criteria = example.createCriteria();
criteria.andSlipIdEqualTo( slipId );
dao.deleteByExample( example );
}
// Move datas from T04 to T06 by slipId
void moveProductsToWorkTable( String slipId ) throws SQLException {
assert slipId != null;
T06CaseDtlTrnDAO dao = new T06CaseDtlTrnDAOImpl( sqlMapClient );
dao.insertFromT04( slipId );
}
// Move datas from T03 to T05 by slipId
void moveOrderFormToWorkTable( String slipId ) throws SQLException {
assert slipId != null;
T05SlipTrnDAO dao = new T05SlipTrnDAOImpl( sqlMapClient );
dao.insertFromT03( slipId );
//used for test transication
//throw new SQLException("tttttttttttt");
}
四条单独的SQL 语句操作:
moveOrderFormToWorkTable( orderForm.getSlipId() );
moveProductsToWorkTable( orderForm.getSlipId() );
deleteProductsInTempTable( orderForm.getSlipId() );
deleteOrderFormInTempTable( orderForm.getSlipId() );
要么都成功,要么都失败!实践证明,上面的事务控制成功!
位置:BPP / jp.co.snjp.kddi.ht.action.CheckResultAction.checkComplete()
两表操作将SQL语句写入单表
如:moveOrderFormToWorkTable( orderForm.getSlipId() ) 就是 insert into ... select ...
则只需要配置, insert 操作对应的表(t05_slip_trn_SqlMap.xml)。
<!-- add by GongQiang,将数据从T03转到T05 -->
<insert id="insert_from_t03" parameterClass="java.lang.String" >
INSERT INTO T05_SLIP_TRN(SLIP_ID,
BARCODE,
COMP_CD1,
COMP_NM1,
COMP_NM2,
COMP_NM3,
SHP_DATE1,
SLIP_NUM1,
SLIP_DTL_NUM1,
PROD_CD1,
PROD_NM1,
LOT1,
SHP_VOL1,
FUNC_ID,
USR_ID,
USR_GRP,
WK_REG_DATE,
REG_DATE,
UPDATE)
SELECT SLIP_ID,
BARCODE,
COMP_CD1,
COMP_NM1,
COMP_NM2,
COMP_NM3,
SHP_DATE1,
SLIP_NUM1,
SLIP_DTL_NUM1,
PROD_CD1,
PROD_NM1,
LOT1,
SHP_VOL1,
FUNC_ID,
USR_ID,
USR_GRP,
REG_DATE,
REG_DATE,
UPDATE FROM T03_SLIP_WK WHERE SLIP_ID = #SLIP_ID:VARCHAR#
</insert>
然后再对应的 dao (T05SlipTrnDAOImpl)中添加方法:
// add by GongQiang,将数据从T03转到T05
public void insertFromT03( String slipId ) throws SQLException{
sqlMapClient.insert("t05_slip_trn.insert_from_t03", slipId );
}