浏览 3183 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (17) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-02-22
当<class>元素或者<set>元素的lazy属性为true时,load() or get() or find()加载这些对象时,Hibernate不会马上产生任何select语句,只是产生一个Obj代理类实例,只有在session没有关闭的情况下运行Obj.getXxx()时才会执行select语句从数据库加载对象,如果没有运行任何Obj.getXxx()方法,而session已经关闭,Obj已成游离状态,此时再运行Obj.getXxx()方法,Hibernate就会抛出"Could not initialize proxy - the owning Session was closeed"的异常,是说Obj代理类实例无法被初始化。然而想在Session关闭之前不调用Obj.getXxx()方法而关闭Session之后又要用,此时只要在Session关闭之前调用Hibernate.initialize(Obj)或者Hibernate.initialize(Obj.getXxx())即可,net.sf.hibernate.Hibernate类的initialize()静态方法用于在Session范围内显示初始化代理类实例。 解决方法: 所以,在映射文件中,将lazy属性设为false即可,<class name="cssduty.table.Team" table="team" catalog="duty" lazy="false"> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-02-26
设置OpenSessionInView即可
|
|
返回顶楼 | |
发表时间:2008-10-15
那样会牺牲性能啊...
|
|
返回顶楼 | |
发表时间:2008-10-20
使用HQL是最简单的,并且也是官方推荐的查询语言:
from Department d left join fetch d.employees |
|
返回顶楼 | |
发表时间:2008-10-21
使用HQL是最简单的,并且也是官方推荐的查询语言:
from Department d left join fetch d.employees |
|
返回顶楼 | |