美文网首页
Hibernate、Jackson与异常org.hibernat

Hibernate、Jackson与异常org.hibernat

作者: Thresh0ld | 来源:发表于2017-05-04 15:47 被阅读63次

    今天在调试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、Jackson与异常org.hibernat

          本文链接:https://www.haomeiwen.com/subject/tffdtxtx.html