(Java/Mybatis)导致异常时未能在“catch”处回滚

(Java/Mybatis)导致异常时未能在“catch”处回滚,java,mybatis,Java,Mybatis,在我对mybatis的有限经验中 我无法回滚事务中执行的所有SQL。 我尝试过多种不同的方法,但似乎都不管用。有什么想法吗?提前谢谢 在DB(mysql)中设置一个带有varchar(4)的字段 插入带有“name”和“12345”的字段 成功插入“name”(无回滚) 附言: 此项目未在Spring中运行 我需要抛出此异常并保持数据正确,这意味着回滚成功 SqlSession SqlSession=MybatisKit.openSqlSession(false); 试一试{ TestMappe

在我对mybatis的有限经验中
我无法回滚事务中执行的所有SQL
我尝试过多种不同的方法,但似乎都不管用。有什么想法吗?提前谢谢

  • 在DB(mysql)中设置一个带有
    varchar(4)
    的字段
  • 插入带有
    “name”
    “12345”
    的字段
  • 成功插入
    “name”
    无回滚
  • 附言:

  • 此项目未在
    Spring
    中运行
  • 我需要抛出此异常保持数据正确,这意味着回滚成功
  • SqlSession SqlSession=MybatisKit.openSqlSession(false);
    试一试{
    TestMapper TestMapper=sqlSession.getMapper(TestMapper.class);
    //成功地
    testMapper.insert(“名称”);
    //引发异常:数据对列太长。。。
    testMapper.insert(“12345”);
    提交();
    }捕获(可丢弃的e){
    sqlSession.rollback();
    //无泄漏
    sqlSession.close();
    抛出新的运行时异常(“asd”);
    }
    sqlSession.close();
    
    您确定引发了异常吗?可以对mysql进行配置,使其不会引发异常,截断值并继续执行。在这种情况下,不会发生回滚obviously@Roman是的,我肯定。我正在再现这种情况。
    要点是,如果抛出异常,
    NOT
    在这种情况下,它可以
    NOT
    回滚:如果发生异常,请包括错误消息和问题的堆栈跟踪。@Roman Konova错误消息:
    数据对列太长…
    我的意思是。。。嗯。。不是这种情况和错误消息,
    是回滚失败…我需要抛出此异常并保持数据正确,这意味着回滚成功…您确定抛出了异常吗?可以对mysql进行配置,使其不会引发异常,截断值并继续执行。在这种情况下,不会发生回滚obviously@Roman是的,我肯定。我正在再现这种情况。
    要点是,如果抛出异常,
    NOT
    在这种情况下,它可以
    NOT
    回滚:如果发生异常,请包括错误消息和问题的堆栈跟踪。@Roman Konova错误消息:
    数据对列太长…
    我的意思是。。。嗯。。不是这种情况和错误消息,
    点是回滚失败…我需要抛出此异常并保持数据正确,这意味着回滚成功。。。