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

发布于 2022-09-01 23:44:46 字数 2345 浏览 10 评论 0

在利用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

戒ㄋ 2022-09-08 23:44:46

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文