当前位置: 代码迷 >> Java Web开发 >> mybatis-spring编程式事务处理BUG,该如何解决
  详细解决方案

mybatis-spring编程式事务处理BUG,该如何解决

热度:2478   发布时间:2013-02-25 21:23:00.0
mybatis-spring编程式事务处理BUG
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = txManager.getTransaction(def);
try {
  userMapper.insertUser(user);
  userMapper.insertUser(user);
}
catch (MyException ex) {
  txManager.rollback(status);
  throw ex;
}
txManager.commit(status);
——————————————————————————————————————————————
userMapper.insertUser(user);有2句,应该是往这个表里插入2条一样的数据,但是为什么只插入了1条啊,不是表主键的问题,表允许插入2条完全一样的数据

------解决方案--------------------------------------------------------
请设置log4j级别为debug
看看执行
userMapper.insertUser(user);
userMapper.insertUser(user);
时的sql语句
就我的理解,很少有直接在代码中嵌入spring的事务管理代码...也就木有什么人回答你了
------解决方案--------------------------------------------------------
userMapper.insertUser(user);
userMapper.insertUser(user);
这两个对象是同一个吧。
你最好这样用吧:
User user = new User();
User user2 = new User();
然后:
userMapper.insertUser(user);
userMapper.insertUser(user2);
试试吧。

------解决方案--------------------------------------------------------
你的理解没有问题,就算是同一个也应该是插入两次的,我这有做测试
就我个人的理解,用spring的目的就是奔其"配置文件或者注解的事务管理"
如果你在代码中写事务,要spring的意义不大吧,比写jdbc的事务还难理解
------解决方案--------------------------------------------------------
个人感觉是跟持久对象有关系,虽然你执行了2次但是是同一个对象 在持久对象中一种都是1一个对象。等事物commit的时候,就是提交持久对象的。
如果你的数据相关,但是对象不是一样的,在持久对象中就是2对象,保存的时候,就是保持两个。
你还可以测试一次在insert后面直接跟commit 可以肯定就能提交量对象了。
------解决方案--------------------------------------------------------
探讨

个人感觉是跟持久对象有关系,虽然你执行了2次但是是同一个对象 在持久对象中一种都是1一个对象。等事物commit的时候,就是提交持久对象的。
如果你的数据相关,但是对象不是一样的,在持久对象中就是2对象,保存的时候,就是保持两个。
你还可以测试一次在insert后面直接跟commit 可以肯定就能提交量对象了。

------解决方案--------------------------------------------------------
哪你告诉我在事物中的对象待处理的对象叫什么?不要跟hibernate的持久对象当一个概念理解好不?如果有一个人也姓邓 也叫小平 你怎么理解邓小平这个人呢。。。。。
  相关解决方案