Hibernate中的OpenSessionInView的源代码(转)
来源:互联网 发布:移动关闭数据上网功能 编辑:程序博客网 时间:2024/05/22 01:54
Hibernate中的OpenSessionInView的源代码(转)
hibernate的lazy机制可以延迟对数据库的访问操作,但同时也带来一个问题。lazy机制里,只有当首次存取Set等集合数据时,hibernate才向数据库发送SQL查询。但这有个限制,就是要保证存取该entity时Session还未被关闭。为了保证session在我们存取时还未被关闭,在WEB应用中,一般采用OpenSessionInView模式。
下面是一个典型的OpenSessionInViewFilter的实现代码:
import java.io.IOException;
import javax.faces.context.FacesContext;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import com.syboos.orm.hiberate.utils.HibernateUtils;
/**
* OpenSessionInViewFilter
*
* @author:tenyo@syboos.com
* @author last modified by:
*/
public class OpenSessionInViewFilter implements Filter {
private static final Log log = LogFactory.getLog(OpenSessionInViewFilter.class);
/*
* (non-Javadoc)
*
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig filterConfig) throws ServletException {
HibernateUtils.initialize();
}
/*
* (non-Javadoc)
*
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
* javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
chain.doFilter(request, response);
} finally {
try {
HibernateUtils.closeSession();
} catch (Exception ex) {
log.error(ex.getCause());
throw new ServletException(ex);
}
}
}
/*
* (non-Javadoc)
*
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
}
}
web.xml
-----------------
<filter>
<filter-name>OpenSessionInView</filter-name>
<filter-class>com.tenyo.common.filter.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意上面代码里的红色部分。在doFilter方法里的最后部分对hibernate session 统一做关闭操作。
HibernateUtils是一个工具类,HibernateUtils.initialize();里主要做初期化操作。HibernateUtils.closeSession()关闭hibernate session.而在程序中不对session做关闭操作。
- Hibernate中的OpenSessionInView的源代码(转)
- Hibernate OpenSessionInView
- hibernate OpenSessionInView
- 谈谈hibernate的延迟加载和openSessionInView
- SSH框架中的使用OpenSessionInView的问题
- SSH框架中的使用OpenSessionInView的问题
- java框架spring中的opensessioninview的作用
- Spring Hibernate OpenSessionInView学习
- Spring Hibernate OpenSessionInView学习
- Hibernate/Spring/Struts架构使用OpenSessionInView的问题
- 解决了Hibernate+Spring+Struts架构使用OpenSessionInView的问题
- Hibernate/Spring/Struts架构使用OpenSessionInView的问题
- Hibernate/Spring/Struts架构使用OpenSessionInView的问题
- Hibernate/Spring/Struts架构使用OpenSessionInView的问题
- Hibernate中使用openSessionInView代替lazy="false"的方法
- OpenSessionInView与Hibernate事务处理机制
- spring的OpenSessionInView用法
- openSessionInView的问题?
- 今天第一次访问
- 购物车4次改进,数据库存储
- 去面试,第一句话就被赶出来了!
- 累..
- unix网站
- Hibernate中的OpenSessionInView的源代码(转)
- nothing
- 兼职的机会 创业的开始
- 哎,可惜呀!!!
- Unicode 的编码和实现
- abstract类和interface的区别
- C#读取Dataset数据并显示在ListView控件中
- 问候判断
- EMail发送