您的位置:首页 > 其它

S2JH Hibernate Lazy抓取策略--could not initialize prox

2015-11-10 11:48 417 查看
在做 图片上传 相关实体保存时,出现了该错误。

相关Entity

@OneToMany(mappedBy = "objectSid", cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy("orderIndex desc")
public List<ObjectR2Pic> getShopPagePics() {
return shopPagePics;
}

Controller

@Override
@MetaData("保存")
public HttpHeaders doSave() {
List<ObjectR2Pic> shopPagePics = bindingEntity.getShopPagePics();
if (!CollectionUtils.isEmpty(shopPagePics)) {
for (ObjectR2Pic shopPagePic : shopPagePics) {
shopPagePic.setObjectSid(bindingEntity.getId());
shopPagePic.setObjectType(ObjectPicTypeEnum.SHOP_PAGE_PIC);
}
}
return super.doSave();
}

程序在执行到

List<ObjectR2Pic> shopPagePics = bindingEntity.getShopPagePics();

总是得不到前端的图片信息,于是接下来就报异常

org.hibernate.LazyInitializationException:could not initialize proxy - no Session

经调查:这是由于Hibernate 延迟初始化导致的错误,此时,该代理类实例或代理集合处于游离状态,此时对他进行初始化,就会报该错误。有的网友提出,设置 fetch抓取策略lazy 懒模式为true,不过也有网友提出这样设置对内存,及性能不友好。

解决: 经过仔细调查S2JH 的父类,原来 @S2JH 已经解决了 该问题,就是在使用之前,预先初始化的lazy集合。

在Controller中追加:

@Override
protected void setupDetachedBindingEntity(Long id) {
bindingEntity = getEntityService().findDetachedOne(id, "shopPagePics");
}

个人Hibernate的持久化理解还是不到位,如果有高人看到,希望能在评论区指点一二。对于文章的浅薄之处,请多多批评。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  S2JH Hibernate