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

    在做 图片上传 相关实体保存时,出现了该错误。

   相关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_第1张图片

你可能感兴趣的:(Hibernate,S2JH)