Configuration cfg = new Configuration(); // 获得配置信息对象
SessionFactory sf = cfg.configure().buildSessionFactory(); //解析并建立Session工厂
1. Session session = sf.getCurrentSession(); // 获得Session
2. Session session = sf.openSession(); // 打开Session
对于上述的两个方法,有以下区别:
1. openSession 从字面上可以看得出来,是打开一个新的session对象,而且每次使用都是打开一个新的session,假如连续使用多次,则获得的session不是同一个对象,并且使用完需要调用close方法关闭session。
2. getCurrentSession ,从字面上可以看得出来,是获取当前上下文一个session对象,当第一次使用此方法时,会自动产生一个session对象,并且连续使用多次时,得到的session都是同一个对象,这就是与openSession的区别之一,简单而言,getCurrentSession 就是:如果有已经使用的,用旧的,如果没有,建新的。
注意:在实际开发中,往往使用getCurrentSession多,因为一般是处理同一个事务(即是使用一个数据库的情况),所以在一般情况下比较少使用openSession或者说openSession是比较老旧的一套接口了;
对于getCurrentSession 来说,有以下一些特点:
1.用途,界定事务边界
2.事务提交会自动close,不需要像openSession一样自己调用close方法关闭session
3.上下文配置(即在hibernate.cfg.xml)中,需要配置:
<property name="current_session_context_class">thread</property>
(需要注意,这里的current_session_context_class属性有几个属性值:jta 、 thread 常用 , custom、managed 少用 )
a).thread使用connection 单数据库连接管理事务
b).jta (java transaction api) Java 分布式事务管理(多数据库访问),jta 由中间件提供(JBoss WebLogic 等,但是tomcat 不支持)
摘自:
相关推荐
标题中的“SessionFactory.getCurrentSession与openSession的区别”是关于Hibernate框架中的两个关键操作,它们都是用于在Hibernate中获取数据库会话的。理解它们的区别对于优化数据访问性能和管理事务至关重要。 ...
在Java的Hibernate框架中,`getCurrentSession()` 和 `openSession()` 都是用于获取与数据库交互的Session对象,但它们之间存在显著的区别。理解这些差异对于优化数据访问性能和管理事务至关重要。 首先,`...
当我们调用SessionFactory().getCurrentSession()时,Hibernate会为我们提供一个已存在的或者新创建的Session实例,这个行为与直接调用SessionFactory.openSession()有所不同。`getCurrentSession()`方法旨在支持...
在Hibernate中,`getCurrentSession()`是SessionFactory类的一个方法,它用于获取当前线程绑定的Session对象。这个方法在处理数据库操作时非常有用,因为每个HTTP请求通常对应一个独立的线程,每个线程都应该有自己...
在Spring中,我们可以使用`SessionFactory.openSession()`或`SessionFactory.getCurrentSession()`方法获取Session实例。 4. **事务管理**:Spring提供了声明式事务管理,只需在方法上添加@Transactional注解,即可...
在Hibernate4的开发中,相较于之前的版本,存在一些显著的变化,这些变化主要集中在session管理、事务处理、缓存配置以及与Spring框架的集成等方面。以下将详细解释这些关键点: 1. **Spring3.1与Hibernate4的整合*...
11. Hibernate中getCurrentSession和openSession的区别是什么? `getCurrentSession`是用于在已有的事务上下文中获取或创建Session,确保与当前事务的一致性。而`openSession`则是直接创建一个新的Session,不考虑...
- 创建`Session`:`SessionFactory.openSession()`或`SessionFactory.getCurrentSession()`(在已配置的事务环境下)。 - 事务开始:`Session.beginTransaction()`。 - 数据操作:如`Session.save()`, `Session....
本文详细介绍了Hibernate框架中的核心配置文件`hibernate.cfg.xml`及其配置项、映射文件`xxx.hbm.xml`,以及核心API如Configuration和SessionFactory的使用方法,并对C3P0连接池进行了简要说明。通过这些内容的学习...
在Hibernate中,我们可以使用Session工厂(SessionFactory)和Session对象来实现。SessionFactory是线程安全的,用于创建Session对象,而Session是数据库会话,用于执行CRUD操作。 ```java private SessionFactory ...
在Spring中,我们可以使用SessionFactory的openSession()或getCurrentSession()方法获取Session实例。 4. **事务管理**: Spring提供PlatformTransactionManager接口,可以用来管理数据库事务。在Hibernate整合中,...
- 获取Session:通过SessionFactory的openSession()或getCurrentSession()获取Session实例。 - 开启事务:在Session上开始一个新的数据库事务。 - 对象操作:执行增删改查操作,如save()、update()、delete()、...
- `getCurrentSession()`方法则会在当前线程中获取一个Session,如果当前线程没有Session,则会自动创建一个新的Session。这种方式适用于需要跨多个方法调用的事务管理。 #### 四、Hibernate生命周期状态 - **瞬...
在企业级应用开发中,通常会将Hibernate与Spring框架一起使用,以实现更高效的开发和更好的代码组织。 - **整合的意义**:Spring框架提供了一种简单的机制来配置和管理Hibernate实例,同时提供了AOP的支持,使得...
Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = new User(); // set user properties... session.save(user); tx.commit(); session.close(); ``` #...
Hibernate是一个开源的对象关系映射(ORM)框架,用于将Java对象映射到关系型数据库中。Hibernate 3.6版本是一个重要的版本,提供了许多改进和新特性。本文将探讨Hibernate 3.6中的相关知识点,包括Java API、ORM...
8. getCurrentSession()和openSession()的区别: - getCurrentSession()会检查当前线程是否已有Session,若有则返回,若无则创建。 - openSession()方法总是创建一个新的Session。 - getCurrentSession()在事务...
当我们将 Spring 与 Hibernate 整合时,主要目的是让 Spring 的 IoC 容器管理 Hibernate 的核心接口 `SessionFactory`,以及利用 Spring 提供的声明式事务管理机制来处理事务。这样做的好处在于可以减少代码量、提高...
- `SessionFactory`和`Session`:在Spring中,我们可以使用`SessionFactory`的`openSession()`方法获取`Session`对象,执行数据库操作。通过`@Autowired`注入`SessionFactory`,然后在需要的地方创建`Session`。 4...