`

Hibernate part 16:管理Session与ThreadLocal绑定

 
阅读更多

 

 

hibernate.cfg.xml中的配置

<property name="hibernate.current_session_context_class">thread</property>

 层序中获取通过SessionFactory获取session时使用getCurrentSession()

	@Test
	public void test01() {
		Session s1 = HibernateUtils.openSession();
		Session s2 = HibernateUtils.openSession();
		System.out.println(s1 == s2);//false
		Session s3 = HibernateUtils.getCurrentSession();
		Session s4 = HibernateUtils.getCurrentSession();
		System.out.println(s3 == s4);//true
	}

 与当前线程绑定的Session会自动关闭, 当Transaction 提交后,Session 会自动关闭

@Test
	public void test02() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction transaction = session.beginTransaction();

		session.get(Customer.class, 1);
		
		transaction.commit();
                //不需要手动关闭,org.hibernate.SessionException: Session was already closed
		session.close();
	}

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    使用ThreadLocal管理“session”数据

    在Web应用中,特别是对于"session"数据的管理,ThreadLocal可以作为一种有效的解决方案。 1. **什么是Session?** Session是HTTP协议中的一个概念,用于存储用户在服务器端的状态信息。当用户登录网站后,服务器会...

    hibernate中session的管理

    在Hibernate框架中,Session是与数据库交互的主要接口,它负责对象的持久化操作。然而,由于Session不是线程安全的,所以在多线程环境中管理Session就需要特别注意。本篇文章将详细探讨Hibernate中Session的管理,...

    Hibernager_Session_Manager_ThreadLocal

    5. **事务管理**:在使用ThreadLocal的模式下,事务管理通常与Session绑定。每个线程内的操作在同一个Session中进行,方便控制事务边界。 6. **性能优化**:ThreadLocal提供了一种高效的Session管理方式,避免了...

    day36 11-Hibernate中的事务:当前线程中的session

    “当前线程中的Session”这一概念指的是,为每个线程绑定一个单独的Session实例,这样可以更好地管理事务,避免并发问题。在Web应用中,通常使用Servlet容器如Tomcat,它支持ThreadLocal机制,能够为每个请求创建并...

    Hibernate用ThreadLocal模式(线程局部变量模式)管理Session

    总的来说,ThreadLocal模式在Hibernate中用于管理Session,解决了多线程环境下Session的共享问题,实现了线程间的隔离,提高了系统的稳定性和效率。通过合理地使用ThreadLocal,开发者可以构建出更高效、更安全的多...

    JAVA ThreadLocal类深入

    Hibernate框架在处理数据库操作时,使用ThreadLocal来管理Session,确保每个线程都有自己独立的Session对象。这样,即使多个线程并发执行,每个线程也不会干扰其他线程的Session,避免了数据错乱的问题。例如,...

    hibernate常用方法集合

    `HibernateSessionFactory` 类是Hibernate应用中常见的一个工具类,用于管理和提供与当前线程相关的Session实例。让我们详细了解一下`HibernateSessionFactory`类中的关键方法和其背后的原理。 1. **配置和初始化...

    ThreadLocal的几种误区

    虽然每个用户会话通常对应一个唯一的Session ID,但ThreadLocal并不直接与用户会话绑定。ThreadLocal是线程级别的,这意味着每个线程都有自己独立的ThreadLocal变量副本。在服务器端,线程池的存在可能导致多个用户...

    ThreadLocal

    ThreadLocal是Java编程语言中的一个类,用于在多线程环境中提供线程局部变量。它是一种特殊类型的变量,每个线程都有自己的副本,互不影响,从而实现线程间数据隔离。ThreadLocal通常被用来解决线程共享数据时可能...

    从ThreadLocal的使用到Spring的事务管理

    ThreadLocal是Java提供的一种线程绑定变量的工具类,它允许我们在一个线程内部创建独立的变量副本。每个线程都有自己的ThreadLocal实例,并且只能访问自己的副本,不会与其他线程的数据产生冲突,从而实现了线程间的...

    入研究java.lang.ThreadLocal类.docx

    **目的**:管理 Hibernate 的 Session,确保每个线程都有独立的 Session 实例。 **关键代码段**: ```java public class HibernateUtil { private static Log log = LogFactory.getLog(HibernateUtil.class); ...

    正确理解ThreadLocal.pdf

    在实际应用中,如上文所示的Hibernate示例,通过`set()`方法可以将`Session`对象与当前线程绑定,而`get()`方法则用于获取当前线程的`Session`对象。这种设计模式避免了在多线程环境中直接操作共享资源可能带来的...

    ThreadLocal应用示例及理解

    ThreadLocal的生命周期是与线程绑定的。当线程结束时,与其关联的ThreadLocal变量不会自动清除,可能会导致内存泄漏。因此,推荐在不再使用ThreadLocal时显式调用`remove()`方法。 ```java threadLocal.remove(); `...

    hibernate HQL 查询

    hibernate HQL 查询教程 管理 Session ThreadLocal 接口的使用

    hibernate

    - **对象/关系映射 (ORM)**:Hibernate 是一种 ORM 技术的实现,它能够将 Java 对象模型映射到关系型数据库中的表。这种方式极大地简化了数据库操作,使开发者能够更加专注于业务逻辑的实现而非复杂的 SQL 语句编写...

    java中ThreadLocal类的使用

    2. **请求上下文**:在Web应用中,可以使用`ThreadLocal`保存HttpServletRequest或Session对象,方便在同一个请求处理链路中访问。 3. **线程状态**:记录线程执行过程中的状态,例如事务管理、计数器等。 然而,...

    Synchronized与ThreadLocal

    ### Synchronized与ThreadLocal #### 一、Synchronized机制详解 **Synchronized** 是 Java 中一个非常重要的关键字,主要用于实现线程同步。它通过在对象上加锁来确保多个线程能够安全地访问共享资源。 - **作用...

    struts2+hibernate3 open session in view

    2. 绑定Session:拦截器需要在Action上下文中绑定Session,这样Action就可以在需要的时候获取到它。这通常通过`ThreadLocal`实现,使得每个线程都有自己的Session副本。 3. 懒加载处理:由于OSIV模式下Session保持...

    hibernate概述

    Hibernate 使用 `ThreadLocal` 来保持每个线程与 `Session` 的对应关系,确保线程安全。`getCurrentSession()` 方法能方便地获取当前线程关联的 `Session`。 11. **JDBC 步骤**: JDBC 连接数据库的基本步骤包括...

Global site tag (gtag.js) - Google Analytics