yunye 2010-01-11 16:48
浏览 444
已采纳

spring 事务没有回滚

我是学习spring新手, 碰到spring事务没有回滚的问题, 希望知道原因的指教,不胜感激:

我在mysql里建了一个测试的admin表(innoDB 类型), 只有id一个字段(整形)。
4条数据:
id
1
2
3
4

配置文件:
[code="java"]
class="com.jandar.fdpweb.action.system.BranchOperationAction">


class="com.jandar.fdpweb.service.system.BranchManage">



class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">


    <property name="target">
        <ref local="branchDao"/>
    </property>

    <property name="transactionAttributes">
        <props>
            <prop key="deleteTest">PROPAGATION_REQUIRED, -Exception</prop>
        </props>
    </property>     

class="com.jandar.fdpweb.dao.jdbc.system.BranchDaoJdbcImpl">



class="org.springframework.jdbc.core.JdbcTemplate">



class="org.springframework.jdbc.datasource.DataSourceTransactionManager">





com.mysql.jdbc.Driver


jdbc:mysql://localhost:3306/cjr_test?characterEncoding=utf8


root


123456

10
5
20
5
60
0

[/code]

Struts Action 类:

[code="java"]
public class BranchOperationAction extends DispatchAction {

private BranchManage branchManage;

public BranchManage getBranchManage() {
    return branchManage;
}

public void setBranchManage(BranchManage branchManage) {
    this.branchManage = branchManage;
}

public ActionForward delete(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
{

        ActionForward forward = new ActionForward();
        DynaActionForm modifyForm = (DynaActionForm) form;          
        String branchId = modifyForm.getString("branch_tj").trim();
        branchManage.deleteTest(branchId);
        forward = mapping.findForward("success");
        return (forward);
}

}
[/code]

Server 类:

[code="java"]
public class BranchManage {
private BranchDao branchTransaction;

public BranchDao getBranchTransaction() {
    return branchTransaction;
}

public void setBranchTransaction(BranchDao branchTransaction) {
    this.branchTransaction = branchTransaction;
}

public void deleteTest(String branchId) {
    branchTransaction.deleteBranch(branchId);
}

}
[/code]

DAO 类:

[code="java"]
public interface BranchDao {
public void deleteBranch(final String branchId);
}

public class BranchDaoJdbcImpl implements BranchDao {
private JdbcTemplate jdbcTemplate;

public JdbcTemplate getJdbcTemplate() {
    return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
}
public void deleteBranch(final String branchId) {
    String sqlDelete1 = "delete from admin where id = 1"; // 先删除一条记录
    int[] arr = {1, 2, 3, 4};   
    jdbcTemplate.update(sqlDelete1); 
            //我调试时, 程序运行这行后, 数据库居然删了一行, 事务这时应该没提交,不会删数据库才对啊, 是这样吗?
            //数组下标越界,想让程序抛出Runtime Exception  
    String sqlDelete2 = "delete from admin where id = " + arr[5]; 
    jdbcTemplate.update(sqlDelete2); // 删除第二条报错,事务没有回滚
}

}
[/code]

  • 写回答

3条回答 默认 最新

  • wanghaolovezlq 2010-01-11 17:15
    关注

    你配置错误
    你是针对dao来配置事务的
    那自然就应该写成这样

    PROPAGATION_REQUIRED, -Exception

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?