首页 > 数据库热切换对于hibernate事务的影响

数据库热切换对于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;
}

最简单的就是把日志输出改成debug 会有commit提示的 如果没有 说明事物没有配置成功

【热门文章】
【热门文章】