刚学SSH整合.做完功课出现一个问题hibernate 一对多关联的 <set /> 里的属性,如果延时加载的Lazy属性不写活着设为false就会报错.
<set name="petDiaries" inverse="true" lazy="true" order-by="diary_id desc">
<key>
<column name="diary_pet_id" />
</key>
<one-to-many class="com.yyaccp.pet.entity.PetDiary" />
</set>
错误:org.hibernate.LazyInitializationException: ....., no session or session was closed但是如果我把Lazy设为false就不会出现问题.但这样就占多了资源了啊..我同学们没设为false都不会出错.为什么会出现这种情况?我之前没整合的时候这样也没错.整合后dao层用的是HibernateDaoSupport.getHibernateTemplate()来操作数据的.好像就是改用这个的时候开始出现这个错误了.何解?怎解? tell me why ~please~
<set name="petDiaries" inverse="true" lazy="true" order-by="diary_id desc">
<key>
<column name="diary_pet_id" />
</key>
<one-to-many class="com.yyaccp.pet.entity.PetDiary" />
</set>
错误:org.hibernate.LazyInitializationException: ....., no session or session was closed但是如果我把Lazy设为false就不会出现问题.但这样就占多了资源了啊..我同学们没设为false都不会出错.为什么会出现这种情况?我之前没整合的时候这样也没错.整合后dao层用的是HibernateDaoSupport.getHibernateTemplate()来操作数据的.好像就是改用这个的时候开始出现这个错误了.何解?怎解? tell me why ~please~
《搜索引擎零距离—基于Ruby+Java搜索引擎原理与实现》 清华出版社。
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=10105450
延时加载 默认的是true 解决 : 如果有用了spring 可以
写个单独管理session的类 继承OpenSessionInviewFilter 这个类 并实现这个类里面的方法 在到web里面如以下配置<filter>
<filter-name>工程名</filter-name>
<filter-class>org.springfreamwork.....OpenSessionInviewdFilter</filter-class》
<int-param>
<param-name>sessionFactoryBeanName</param-name>//名字不能变
<param-value>sessionFactory</param-value> //获得session的bean的id
</int-param>
</filter><filter-mapping>
<filter-name></filter-name>
<u..-param>/*</u..-param>
</filter-mapping>如果只用到了hibernate 可以到dofilter测试类 里面去实现
如果 session是关闭的 就把session打开 如果session是打开的就直接返回