Hibernate开发中的异常:could not initialize proxy - no Session

原创 2017年08月12日 16:23:13

一、异常内容

could not initialize proxy - no Session

二、异常原因分析

首先在我的持久化类User中有如下片段:

//User.java
@Entity
@Table(name = "user_inf")
public class User {
    //用户的订单信息
    @OneToMany(targetEntity=Order.class,mappedBy="user")
    private Set<Order> orders=new HashSet<Order>();
    //省略其他内容
}

控制器代码片段如下:

//GoodAction.java
/**
     * 提交订单,只有用户才能操作
     * @return
     */
    public String submitOrder(){
        //省略部分代码
        User user=userService.find(tel, password);
        //权限验证通过,提交订单获取提交状态
        boolean result=goodService.submit((User)object,id);
        if(result) return SUCCESS;
        return ERROR;
    }

用户的业务逻辑组件代码片段如下:

//UserServiceImpl.java
@Override
    public User find(String tel, String password) {
        List<User> list=userDao.find("select u from User u left join fetch u.orders where u.tel=? and u.password=?",tel,password);
        return list.size()==0?null:list.get(0);
    }

商品业务逻辑组件代码片段如下:

//GoodServiceImpl.java
@Override
    public boolean submit(User user, Serializable goodId) {
        //省略一部分不相关的东西
        //下行代码会出错
        user.getOrders().add(order);
        return true;
    }

可知罪魁祸首就是下面几行代码:

//系统在这行代码处报错
user.getOrders().add(order);

真正的错误位置是下面的hql语句位置:

//UserServiceImpl.java
@Override
    public User find(String tel, String password) {
        List<User> list=userDao.find("select u from User u left join fetch u.orders where u.tel=? and u.password=?",tel,password);
        return list.size()==0?null:list.get(0);
    }

系统给了我们提示:当前的session处于关闭状态,而在加载user对象的并没有获取到它的orders属性,因为Hibernate对持久化集合的处理方法默认是使用延迟加载的方式,并其在查询并没有指定不使用延迟加载,所以才会出现异常。

三、异常解决

//UserServiceImpl.java
@Override
    public User find(String tel, String password) {
        List<User> list=userDao.find("select u from User u left join fetch u.orders where u.tel=? and u.password=?",tel,password);
        return list.size()==0?null:list.get(0);
    }

可知在hql语句中加了一句话:

left join fetch u.orders

它意味着在查询User实体时也会把orders的值查出来赋给User实体。

当然也可以通过取消懒加载来解决。

版权声明:本文为博主原创文章,未经博主允许不得转载,如对博客有疑问,欢迎私信我,嘻嘻~

Spring整合Hibernate使用懒加载报错Could not initialize proxy - no Session

今天在学习shiro的时候搭了一个Springmvc+Spring+Hibernate整合框架,然后当我把one-many,many-one这些映射关系加上懒加载的时候运行的时候报错 Could n...
  • Lgnorant
  • Lgnorant
  • 2017年08月07日 17:07
  • 332

Hibernate3中could not initialize proxy - no Session的解决办法

最近自己在进行多表操作,出现了
  • wangdianyong
  • wangdianyong
  • 2014年05月26日 13:55
  • 805

解决Hibernate:could not initialize proxy - no Session

异常: org.hibernate.LazyInitializationException: could not initialize proxy - no Session at org.hibe...
  • u010167086
  • u010167086
  • 2013年11月29日 21:04
  • 12896

在整合SpringMVC时,openSession和getCurrentSession事物控制区别,在测试时如果报could not initialize proxy - no Session

Hibernate4导致load()延迟加载方法session关闭,报org.hibernate.LazyInitializationException: could not initialize p...
  • semial
  • semial
  • 2016年08月15日 14:06
  • 880

dubbo序列化,hibernate.LazyInitializationException could not initialize proxy - no Session懒加载异常的解决 转

dubbo序列化,hibernate.LazyInitializationException could not initialize proxy - no Session懒加载异常的解决   转...
  • sunkes
  • sunkes
  • 2017年11月02日 14:49
  • 129

spring-boot拦截器中出现could not initialize proxy - no Session完美解决方案

spring-boot拦截器中出现could not initialize proxy - no Session完美解决方案
  • zhangjq520
  • zhangjq520
  • 2017年01月06日 11:11
  • 1564

【JAVA】【WEB】【SSH】could not initialize proxy-no Session

这是一个经典的问题:     因为我们在hibernate里面load一个对象出来时,用到的是代理对象,也就是说当我们在执行load方法时并没有发sql语句,而是返回一个proxy对象。只有当们具体用...
  • csdn_yudong
  • csdn_yudong
  • 2015年11月02日 17:02
  • 1076

hibernate3中出现 could not initialize proxy - no Session 错误的解决办法以及lazy load的介绍

 could not initialize proxy - no Session异常:org.hibernate.LazyInitializationException: could not init...
  • remote_roamer
  • remote_roamer
  • 2008年09月16日 00:24
  • 44641

hibernate延迟加载的传说级错误org.hibernate.LazyInitializationException: could not initialize proxy - no Session

好多人都会遇到这个错误。http://hi.baidu.com/itroad/blog/item/6d12f01fe0b8dc0d314e1531.html could not initialize ...
  • elfenliedef
  • elfenliedef
  • 2010年11月16日 11:21
  • 27562

spring-boot 完美解决:could not initialize proxy - no Session

spring-boot 完美解决:could not initialize proxy - no Session
  • zhangjq520
  • zhangjq520
  • 2016年12月19日 15:35
  • 3474
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate开发中的异常:could not initialize proxy - no Session
举报原因:
原因补充:

(最多只允许输入30个字)