首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > OpenSessionInView模式
【标  题】:OpenSessionInView模式
【关键字】:OpenSessionInView
【来  源】:http://blog.csdn.net/sumongh_pan/archive/2007/01/11/1480033.aspx

OpenSessionInView模式

 

OpenSessionInView模式

Spring+Hibernate中,  集合映射如果使用lazy="true", 当PO传到View层时, 出现未初始化session已关闭的错误,只能在dao先初始化
parent.getChilds().size();

Spring提供Open Session In View来解决这个问题, 有两种方式
1. Interceptor
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    
<property name="interceptors">
        
<list>
            
<ref bean="openSessionInViewInterceptor"/>
        
</list>
    
</property>
    
<property name="mappings">
    .
    
</property>
</bean>

<bean id="openSessionInViewInterceptor"
class
="org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor">
    
<property name="sessionFactory">
        
<ref bean="sessionFactory"/>
    
</property>
</bean>
2. Filter
<web-app>
 
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate.support.OpenSessionInViewFilter
</filter-class>
</filter>
 
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>

</web-app>

说明: 个人更喜欢用Interceptor方式, filter是在web.xml中定义
有了OpenSessionInView,并不是一切就ok了。简单的crud可以,但对于复杂业务逻辑就要想点法子。

OSIV默认是request per session的, 所以即使没有显式update(po),Hibernate也会帮你保存的,dao的业务判断就无效,还好有evict()可用。
update code
Controller
public ModelAndView update() {
    p 
= dao.getVo(id);
    bindObject(request);
    dao.update(p);
}


Dao
public Object getVo(id) {
    p 
= getHibernateTemplate().get(clazz, id);
    p.getChilds().size();
    getHibernateTemplate().evict(p);
    
return p;
}

public void update(p) {
    oldP 
= getVo(id);
    
// ++--(oldP);
    getHibernateTemplate().update(p);
    
// ++--(p);
}

Spring系列第1部分:Spring 框架简介(图):【上一篇】
hibernate many-to-many saveOrUpdate merge 的选用:【下一篇】
【相关文章】
  • 谨慎使用OpenSessionInViewFilter
  • 使用OpenSessionInView模式时的一个异常问题解决方法
  • 【随机文章】
  • JasperReport介绍
  • eTracker让你随时追踪邮件状态
  • 昨天把freebsd分区扩大到10G
  • 数据库基础——SQL SERVER 2000中的数据类型
  • UltraEdit 支持Python的格式文件
  • 不少人反映window2003下apache性能不稳定
  • 大话流氓软件(二):可惜了,你怎么就成流氓了呢?
  • 列出指定目录下的所有文件和目录
  • 最新CU/400区精华帖子chm格式下载(2006/05/21)
  • 什么是高血脂、高血脂症、血脂高怎么办人到老年,调压、调脂要同时并举
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.