问个问题...在使用Hibernate与Spring结合的时候,Hibernate在处理对象之间的关系为双向关联,懒加载...在web项目中可以使用web.xml的配置,加入一个Filter<<OpenSessionInViewFilter>>解决session close!  但是非web程序,就是普通的应用程序,如何解决懒加载 no session or session was closed !如果说是将懒加载去掉...那不是我想要知道的答案...我就想要知道懒加载下的解决方案 ... 着急...

解决方案 »

  1.   

    OpenSessionInterceptor可以实现这个功能不过这2个都不用也可以,一般大的项目中,很少会延迟到view层才加载,一般都是在service层统一配置事务,service方法里是同一个session,方法结束后事务提交,session关闭。
      

  2.   

    不是web项目“懒加载”可以用其他的方式实现相同的功能!
      

  3.   

    用hibernate必须掌握对象3状态1会话,否则会遇到无穷无尽的麻烦。
    spring和hibernate绑定,用于web,默认的方式是发出一个请求就打开会话,请求完毕后就关闭会话。如果用layze=true,你很有可能是在WEB请求完毕后在进行后续的级联操作,就会发生你那样的错误。解决思路是:发出请求的,先关闭上一次的会话,请求回来后,不关闭会话。也就是说,你可以重新写一个filter,在filter中关闭一次会话。这是我长期用hibernate的经验,希望对你有帮助。
      

  4.   

    还有,layze=true千万不要去掉,否则性能会让你无法接受
      

  5.   

    额.ls有朋友说OpenSessionInterceptor可以解决.但我在看源码的时候,发现居然有WebRequest属性,难道必须在web项目才行?如果非web项目也行,麻烦大虾给下源码...我现在考虑是否使用AOP拦截技术,使用@AfterThrowing(异常拦截) 当操作出现org.hibernate.LazyInitializationException异常的时候,拦截,创建新的session并传递给具体的被拦截方法..然后调用执行...