依然还是熟悉的问题
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role程序使用Struts2,Hibernate,Spring整合,使用Annotation完成Entity的定义,前端为Ajax。拿BBS中的Board表(板块)作比喻,Board中有id,name,children,parent等属性,children为List<Board>类型(One-Many),parent为Board类型(Many-One),可以理解为一棵树。前端用AJAX请求后台调用获取所有Board信息的方法,Hibernate处理完操作后,将值传给Struts2,session随之关闭,此时拿到的List<Board> boards值实质为代理对象,而此时boards作为Struts2的属性,需要将其返回给前端,将会对boards下的属性进行赋值,由于session已关闭,在对children及parent赋值时即会抛出延迟加载的异常。现在的问题是,我希望在Hibernate拿完值给Struts2后,Struts2在赋值的时候不自动给其children及parent赋值,或是只赋予id值,延迟加载策略即可以实现这个效果,可是此时Struts2会自动为其它属性赋值。OpenSessionInView可以解决延迟加载的异常,但是就不能满足只设置ID值不设置其他属性的需求。更严重一点的是,Hibernate中的One-May等关联关系在序列化时如果没有控制,则将整个数据库都有可能被全部序列化,这是无法想象的事。语言组织能力不强,不知道大家有没看明白我想描述的问题,总之就是想问如何能在不抛延迟加载异常的情况下,能只保留引用对象的部分属性,即在Action中不自动的去调用getXXXX()方法。另不想使用DTO/VO对象,如果所有对象都用其代替,那还要Entity做什么,而且又会增加一层,增加编程、维护量。希望各位大牛们帮忙看看,有没有什么好建议?