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 可以肯定就能提交量对象了。
------解决方案--------------------
------解决方案--------------------哪你告诉我在事物中的对象待处理的对象叫什么?不要跟hibernate的持久对象当一个概念理解好不?如果有一个人也姓邓 也叫小平 你怎么理解邓小平这个人呢。。。。。