今天在調(diào)試Api接口的時(shí)候突然遇到這個(gè)org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer錯(cuò)誤,可是我昨天明明測(cè)試都是好好的啊。我打斷點(diǎn)進(jìn)去看一下,一步一步的執(zhí)行,咦,居然沒(méi)報(bào)錯(cuò)。把斷點(diǎn)去掉,再執(zhí)行,報(bào)錯(cuò)了,始終是org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer 這個(gè)錯(cuò)誤。
好吧,Google大法好,搜索去吧。參見(jiàn)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;
}
乍一看沒(méi)什么問(wèn)題啊,先用Hibernate 根據(jù)主鍵ID去load用戶(hù)啊,如果在的話,把bean的id set到entity中啊。
問(wèn)題就是出在這,load是懶加載,不知道為毛在調(diào)entity.setId的時(shí)候這個(gè)entity還沒(méi)有準(zhǔn)備好。。。。如果讀者知道原因歡迎和我分享,謝謝。
解決方案也很簡(jiǎn)單,將load改為get即可。
也就是像下面這樣:
userEntity = session.get(UserEntity.class, userBean.getId());

關(guān)注我的公眾號(hào).jpg