`
finally_m
  • 浏览: 69655 次
  • 性别: 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管理。 首先,理解Session在Hibernate中的角色至关重要。Session是Hibernate的主要工作单元,它是应用程序与数据库之间的桥梁。它负责保存、检索和更新Java对象,...

    Hibernate-nosession

    在这种情况下,使用Hibernate-nosession模式可以避免创建和管理Session的开销,从而提高应用性能。nosession模式并不意味着完全不使用Hibernate,而是尽量减少对Session的依赖,转而使用其他API,例如Query或...

    Hibernate Session释放模式

    这是最常见的Session管理方式,通常与Spring的@Transactional注解结合使用。每个数据库事务开始时创建Session,事务结束时关闭Session。这种方式简单且易于理解,能保证事务的ACID特性,但可能会导致大量的短连接,...

    hibernate session生命周期示例

    通过合理的Session管理,我们可以减少数据库交互的复杂性,提高程序性能,并避免数据一致性问题。实践中,还要注意避免频繁打开和关闭Session,以及合理控制事务的粒度,以达到最佳的性能效果。

    Hibernate_Session_Transaction

    在Java的持久化框架Hibernate中,`Session`和`Transaction`是两个至关重要的概念,它们在数据管理和事务处理中起到核心作用。这篇文章将深入解析这两个概念及其相关知识点。 `Session`是Hibernate提供的一种与...

    hibernate中session的管理

    在实际开发中,除了使用ThreadLocal,还有其他几种Session管理策略,例如: 1. **Session per Request/Transaction**:每个HTTP请求或数据库事务分配一个Session。这通常是Web应用程序的最佳实践,因为HTTP请求是...

    hibernate和session学习

    【hibernate与Session详解】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。通过Hibernate,我们可以将数据库中的表与Java类进行映射,从而实现对...

    对Hibernate Session做一个简单的包装

    本篇文章将探讨如何对Hibernate的`Session`进行简单的包装,以提升代码的可维护性和灵活性。`Session`是Hibernate的核心组件,它负责对象的持久化操作,如保存、更新、查询等。 `Session`接口提供了多种方法来与...

    重写hibernate的session简单增删改查

    Session提供了事务管理和缓存管理的功能,确保了数据的一致性和性能。 1. 增加(Create) 在Hibernate中,增加数据通常通过调用Session的save()或saveOrUpdate()方法来实现。save()用于新对象的保存,如果对象已经...

    Hibernate的Session的javadoc

    Hibernate的Session接口是Java应用程序与Hibernate之间主要的运行时交互接口,它提供了对持久化对象的创建、读取和删除操作。Session的概念是基于对象的状态管理和数据库事务的,它的生命周期通常与一个物理事务绑定...

    hibernate入门教程

    持久化对象是指被当前Hibernate Session管理的对象,它们的状态与数据库中的记录同步;游离对象是指曾经是持久化对象,但是当前的Session已经关闭,无法保证其状态和数据库同步。 Hibernate通过Session接口来管理...

    SSH笔记-管理Session和批量操作数据库

    3. **Hibernate Session管理**: - Hibernate的Session是与数据库交互的主要接口,它负责持久化对象的创建、加载、更新和删除。 - Session支持一级缓存,可以有效减少对数据库的直接访问,提高性能。 - 使用`...

    hibernate session详细方法,值得珍藏

    ### Hibernate Session 详解:值得珍藏的深度解析 在Java持久化领域,Hibernate无疑占据了举足轻重的地位,而`Hibernate Session`则是其中的核心组件之一,它提供了与数据库交互的主要接口,是对象/关系映射(ORM)...

    Hibernate_session_factory_配置.docx

    在Java的持久层框架Hibernate中,SessionFactory是核心组件之一,它是线程安全的,负责创建Session对象,每个Session对应于数据库的一次会话。配置SessionFactory主要是通过Hibernate的配置文件(通常为hibernate....

    HibernateSession , Transaction 研究

    本文将深入研究Hibernate中的`Session`和`Transaction`,这两个概念是理解Hibernate工作原理的关键。 首先,让我们了解`Session`。在Hibernate中,`Session`充当了应用程序与数据库之间的桥梁,它是持久化操作的...

    Hibernager_Session_Manager_ThreadLocal

    总结起来,"Hibernage_Session_Manager_ThreadLocal"是一个关于使用ThreadLocal在多线程环境中优化Hibernate Session管理的技术实践,通过这种方式可以提升应用程序的性能和安全性。`HibernateUtil.java`是实现这一...

    Spring hibernate opensessioninview

    综上所述,`OpenSessionInViewFilter`作为一种简化Hibernate Session管理和事务处理的方式,在适当的场景下能够极大地提高开发效率和代码质量。但在使用时也需要注意其潜在的性能影响和其他风险,合理选择是否启用该...

    hibernate02:session对象、hql查询、在线查询也叫对象查询、离线查询

    本话题主要聚焦于`Hibernate02`,涵盖`Session`对象、HQL(Hibernate Query Language)查询以及在线查询和离线查询的概念。 首先,我们来详细讨论`Session`对象。在Hibernate中,`Session`是应用程序与数据库之间的...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    本篇文章主要关注如何通过Hibernate的Session接口来操纵对象,实现数据的持久化。 首先,我们需要理解Session在Hibernate中的角色。Session是Hibernate的核心接口之一,它负责对象的持久化操作,比如保存、更新、...

    Hibernate Session 4种对象状态.docx

    在Java的持久化框架Hibernate中,对象的状态管理是其核心功能之一。Hibernate将对象的状态划分为四种:临时状态、持久化状态、游离状态和删除状态。这些状态反映了对象与数据库记录之间的关系,有助于理解Hibernate...

Global site tag (gtag.js) - Google Analytics