在hibernate的实体类里,有一个Set集合,我要在其set方法里实现一些逻辑,但会报异常,说session已经关闭,但在其它属性的set方法里就可以,知道怎么解决吗?
public class TblBoard implements java.io.Serializable { // Fields private Integer boardId; private String boardName; private Integer parentId; private Set<TblTopic> tblTopics = new HashSet<TblTopic>();

private int tblTopicsSize;
        
        .......这里省去了一些属性的getter setter方法. public Set<TblTopic> getTblTopics() {
return tblTopics;
} public void setTblTopics(Set<TblTopic> tblTopics) {
this.tblTopics = tblTopics;
setTblTopicsSize(tblTopics.size());
} public int getTblTopicsSize() {
return tblTopicsSize;
} public void setTblTopicsSize(int tblTopicsSize) {
this.tblTopicsSize = tblTopicsSize;
}
}

解决方案 »

  1.   

    lazy-load
    懒惰加载设定为false
    这样就可以加载了
    在xml文件中配置
      

  2.   

    1楼只说对了一半,对于集合类型的延迟加载还要在session关闭前初期化一下,否则即使选择延迟加载机制也是没用的Hibernate.initialize(xxx.getTblTopics());
    session.close();这样应该就行了
      

  3.   

    试过了,不行,还是说SESSION已经关闭.是不是tblTopics是代理,所以为能用?
      

  4.   

    配置个Open Session In View http://csinfo.blog.hexun.com/24048286_d.html
    一般用上面的方法,如果直接设置lazy=false的话,那么只能查询对象的时候,相关的集合就会通过执行更多的sql,一般不会这么做