今天在調(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用戶啊,如果在的話讨跟,把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());