Hibernate、Jackson与异常org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer

今天在调试Api接口的时候突然遇到这个org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer错误,可是我昨天明明测试都是好好的啊。我打断点进去看一下,一步一步的执行,咦,居然没报错。把断点去掉,再执行,报错了,始终是org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer 这个错误。
好吧,Google大法好,搜索去吧。参见StackOverFlow

先看下我之前的代码

    private static UserEntity beanToEntity(UserBean userBean) throws NotFoundException {
        UserEntity userEntity;
        if (userBean.getId() >= 0) {//update user
            try (Session session = HibernateSessionFactory.getSession()) {
                userEntity = session.load(UserEntity.class, userBean.getId());
            }
            if (userEntity == null) {
                throw new NotFoundException("No id of " + userBean.getId() + " in user entity");
            }
            userEntity.setId(userBean.getId());
        } else { //add user
            userEntity = new UserEntity();
            // user id is auto generate by mysql,so we shouldn't sign it.
            //Hibernate will ignore id when insert to db.
        }
        userEntity.setName(userBean.getName());
      //省略了一些set
        return userEntity;
    }

乍一看没什么问题啊,先用Hibernate 根据主键ID去load用户啊,如果在的话,把bean的id set到entity中啊。
问题就是出在这,load是懒加载,不知道为毛在调entity.setId的时候这个entity还没有准备好。。。。如果读者知道原因欢迎和我分享,谢谢。

解决方案也很简单,将load改为get即可。
也就是像下面这样:

userEntity = session.get(UserEntity.class, userBean.getId());

关注我的公众号.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Hibernate 检索 hibernate 提供5种检索数据的方式导航对象图检索方式: 根据已经加载的对象...
    luweicheng24阅读 2,948评论 0 0
  • 本文中我们介绍并比较两种最流行的开源持久框架:iBATIS和Hibernate,我们还会讨论到Java Persi...
    大同若鱼阅读 9,789评论 4 27
  • 这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring ...
    杂货铺老板阅读 5,291评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,954评论 18 399
  • 本文包括:1、Hibernate的持久化类2、Hibernate 持久化对象的三个状态(难点)3、Hibernat...
    廖少少阅读 5,345评论 0 13