今天在调试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
网友评论