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条)

报告相同问题?

悬赏问题

  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题