`
finally_m
  • 浏览: 67339 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate Session 管理

阅读更多

hibernate中的Session关系到对数据库的增删查改等基本的数据存取操作。对Session进行有效的维护,就像是在jdbc编程中对JDBC collection的维护。

 

问题?

Hibernate级联查询时,如果对于级联对象的lazy属性配置为true,那么在真正使用到级联对象时,会出现session关闭的提示。

 

解决方法:

struts+hibernate的方案中,常常利用过滤器(Filter)session进行管理,以实现session在线程范围内的共享。为什么仅仅实现线程内的共享,是因为,不能把session用于多线程,否则会出现意外。在线程范围内实现sesion的共享,避免了session的频繁的创建和销毁。如果在单个方法内打开session,执行,关闭session,这显然没有在一次会话中有效的利用session

下面的方案是.通过建立一个过滤器,以实现对sesion的共享:

 

public class HibernateSessionOpenInViewFilter implements Filter {
	private static final Log log = LogFactory.getLog(HibernateSessionOpenInViewFilter.class);
	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// 开启一个事务
		log.info(" Transaction begin...");
		Session session = HibernateSessionFactory.getSession();
		Transaction tx = session.beginTransaction();
		try {
			chain.doFilter(request, response);
			tx.commit();
			log.info("Transaction end. ");
		} catch (Exception e) {
			tx.rollback();
			log.error("Transaction rollback. ");
		} finally {
				HibernateSessionFactory.closeSession();
				log.info("Hibernate Session Close. ");
		}

	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}

}

 

web.xml文件中对上面的过滤器进行配置:

<filter> 
    <filter-name>hibernateSession</filter-name> 
    <filter-class>com.utils.filter.HibernateSessionFilter </filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>hibernateSession</filter-name> 
    <servlet-name>action</servlet-name> 
</filter-mapping>

 

对所有以.do作为后缀名的url,都会被过滤器过滤.在被过滤器过滤的action中,和业务层的方法内,只需要调用HibernateSessionFactory getSession()方法,得到当前线程内的session对象,用完session后,不要关闭session,而且,每次在用session进行添加和修改操作时,也不需要启动事务。

分享到:
评论
1 楼 游其是你 2013-03-11  
谢谢博主,这种确实很好,但是如果是ajax提交数据似乎不能保存数据,不知道楼主有没有发现这种情况呢?

相关推荐

    Hibernate(session管理)

    Hibernate 中对session的管理!

    hibernate中session的管理

    hibernate中session的管理描述。 hibernate中session的管理描述。

    hibernate的核心接口--Session

    Session是Hibernate中应用最频繁的接口,Session也被称为持久化管理器,它负责所有的持久化工作,负责管理持久化对象的生命周期,提供第一级别的高级缓存来保证持久化对象的数据与数据库同步

    Hibernate管理Session和批量操作分析

    主要介绍了Hibernate管理Session和批量操作的技巧,包括Hibernate管理Session、批量处理数据等的常用技巧及注意事项,具有一定的参考借鉴价值,需要的朋友可以参考下

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...

    利用Spring来管理Hibernate完整例子

    其中Hibernate每次都需要手动创建SessionFactory,Session,手动开启提交关闭事务。而这一切操作完全是由Spring来代替。使持久层更加方便,使开发人员减少持久层操作,把注意力放到业务上。

    Hibernate Web应用的开发步骤

    Hibernate Web应用的开发一般经过以下几个步骤: ...(7)通过创建的Session实例进行持久化对象的管理。 (8)通过创建的Transaction实例进行事务管理。 (9)通过创建的Query或Criteria实例实现数据库的查询。

    hibernate3

    (1)Configuration:用于解析hibernate.cfg.xml文件和XXXXX.hbm.xml文件,并创建SessionFactory对象。Configuration对象用于配置并且启动Hibernate。...(3)Session:也被称为持久化管理器,对象级数据库操作。

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(hibernateSession)); ``` 然后,在类中加入以下两个私有函数: ```java private SessionFactory lookupSessionFactory...

    SpringMVC+Hibernate+annotation+Easyui权限管理系统

    SpringMVC+Hibernate+annotation+Easyui权限管理系统,Session过期控制(包括Ajax请求的过期控制),访问权限控制(权限控制到按钮),hibernate数据库用户名与密码加密,其它的不说了,绝对物有所值

    hibernate基础教程

    在Hibernate中使用两极缓存结构,第一级缓存是Session级别的缓存,Session级别的缓存是由Hibernate管理的,一般情况下无需进行干预.第二级缓存是 SessionFactory级别的缓存,SessionFactory级的缓存可以进行配置和...

    Hibernate思维导图

    Hibernate主键生成策略,Hibernate持久化对象,Hibernate中session的管理

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用  3.6.1 创建运行本书范例的系统环境  3.6.2 创建helloapp应用的目录结构  3.6.3 把helloapp应用作为独立应用程序运行  3.6.4 把helloapp应用作为...

    第24次课-1 Spring与Hibernate的整合

    有效的Session管理:Spring提供了有效、简单、安全的Hibernate Session处理。 IoC容器降低了DAO组件与业务逻辑层之间的耦合性。 DAO模式的使用,降低了系统重构的代价。 方便的事务管理:Spring提供的声明式事务处理...

    hibernate学习文档

    hibernate 学习资料 Session接口 Query和Criteria接口 Hibernate主键介绍 二级缓存的管理

    Hibernate 课件及源代码

    Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射(1-n、1-1、n-n、继承映射)、检索策略、检索方式(对象导航图、OID 检索、HQL、QBC、本地SQL)、Hibernate 一\二级缓存、管理 ...

    Spring_Hibernate集成

    Hibernate Session的轻量级封装 * 默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的 * 编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理 * 关于事务...

    Hibernate+中文文档

    3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的(即无参数的)构造方法...

    整合jsf hibernate spring实例

    hibernate: 管理实体关系映射 spring:数据源配置与获得session IOC依赖注入 和 AOP 事务管理 jsf : backing bean的操作 jsf 标签应用 jsf 信息国际化以资源绑定 jsf 表单验证 jsf 导航设定

    Hibernate4学习基础教程(26集)

    内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射、检索策略、检索方式、Hibernate 一\二级缓存、管理 Session、批量处理等 Hibernate 企业级开发的核心技术。

Global site tag (gtag.js) - Google Analytics