数据库热切换对于hibernate事务的影响
在利用springMVC框架中
将@Transactional(readOnly = false)写在serviceImpl方法中,在做dao保存实体类之前,先进行了数据库的切换。
当进行System.out.println("==========>"+userInfoDAO.getSession().save(info));操作时可以输出在该表新建数据的id号。
但是,在整个实现类调用结束以后,发现数据库并没有能够真正保存数据。
我的设想是:在运行完dao后并没有提交事务,因为serviceImpl未执行完。但是,当执行完之前,又切换了数据库。导致调用dao的操作并没有能够提交到数据库。
有没有大神能够指导一下,到底是什么原因导致的?对于这类问题有没有比较好的处理方案?
代码大致如下:
@Override
@Transactional(readOnly = false)
public JSONObject registerJKYUser(String name, String idcard) {
JSONObject object = new JSONObject();
String username = "";
CustomerContextHolder
.setCustomerType(CustomerContextHolder.SESSION_FACTORY_ORACLE);
MD5 md5 = new MD5();
String encodePsd = md5.getMD5ofStr("wanda123");
Date now = new Date();
String dateStr = AccountConstant.sdf.format(now);
Date date = new Date();
try {
date = AccountConstant.sdf.parse(dateStr);
} catch (ParseException e) {
date = now;
e.printStackTrace();
}
username = "wonders"
System.out.println("===================>健康云用户名:"+username);
try {
// Oracle表userinfo:有诸多外键关联,须小心
UserInfo info = new UserInfo();
info.setCreateDate(date);// 创建日期
info.setUpdateDate(date);// 更新日期
info.setMobile("");// 实际为手机号
info.setStatus(1);// 默认1
info.setCert(idcard);// 空串
System.out.println("==========>"+userInfoDAO.getSession().save(info));
// Oracle表user
User user = new User();
user.setUserName(username);// 改成自动生成,短用户名
user.setPwd(encodePsd);// 编码之后的密码
System.out.println("==========>"+userDAO.getSession().save(user));
};
} catch (Exception e) {
object.put("success", false);
object.put("msg", "注册失败");
object.put("username", "");
return object;
}
/*********************最后验证生成用户是否成功*************************/
if(userDAO.checkUsername(username) == null){
object.put("success", false);
object.put("msg", "注册失败");
object.put("username", "");
}else{
object.put("success", true);
object.put("msg", "注册成功");
object.put("username", username);
}
CustomerContextHolder.clearCustomerType();
return object;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
最简单的就是把日志输出改成debug 会有commit提示的 如果没有 说明事物没有配置成功