标签:
在做 图片上传 相关实体保存时,出现了该错误。
相关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 Lazy抓取策略--could not initialize prox
标签:
原文地址:http://my.oschina.net/GoogleFan/blog/528432