描述:本人出现此问题是在aciton中可以获得对象的属性值为另一个对象,在jsp页面中使用EL表达式直接显示抛出。
原因分析:
此异常为hibernate的懒加载异常。后台action中session是开着的,走出方法后关闭,前台页面得不到session抛出。hibernate的session已经关闭,集合没有被初始化。在hibernate中:hibernate3 默认支持延迟加载(lazy="proxy"我们可以把proxy看作是true),hibernate2 默认立即加载 (lazy="false")。在hibernate3中,所有的实体设置文件(user.hbm.xml)中的lazy属性都被默认设成了true,就是当这个类没有被调用时,延时加载,导致了以上情况的发生,在配置文件中将lzay属性设为false就可以了。
原因 :
<may-to-one>or<one-to-may> 的 lazy 属性默认为 :lazy = "proxy"
解决 :<many-to-one> & <set> 中设置 lazy="false"
本人的是在spring中default-autowire="byName" default-lazy-init="true"> ;
解决方法:
1,修改lazy的值。此方法需要慎重。
2 在action中重新为对象的属性赋值。
Map variables = ti.getVariables();
ti.setVariables(variables);
前台页面的都可以了。ok.问题解决。
hibernate的lazy在性能方面确实是有提升的。方法1需要慎重考虑