Hibernate中SessionFactory中的OpenSession和getCurrentSesion的区别以及异常No Session found for current thread的解决
1. Opensession打开一个新的Session,而getCurrentSession在当前有session的话,则是使用当前的session,没有的话则创建一个新的Session;
2. 如果使用Opensession获得一个session的话,需要手动关闭session,即调用session.close(),使用后者,当事务提交,即commit和rollback后,session会自动关闭,如果再关闭session则会报如下异常:Session has already closed;
如果使用getCurrentSession()出现异常:No Session found for current thread,
有可能是没有在当前调用的类上使用事务注解:@Transactional
异常:如果使用getCurrentSession()出现org.hibernate.HibernateException:No CurrentSessionContext configured!
需要在hibernate.cfg.xml做如下配置:
相关推荐
标题中的“新Hibernate SessionFactory().getCurrentSession()猫腻”指的是在使用Hibernate ORM框架时,一个常见但不为人熟知的细节,即SessionFactory().getCurrentSession()方法的使用。在深入讲解这个知识点之前...
标题中的“SessionFactory.getCurrentSession与openSession的区别”是关于Hibernate框架中的两个关键操作,它们都是用于在Hibernate中获取数据库会话的。理解它们的区别对于优化数据访问性能和管理事务至关重要。 ...
在Java的Hibernate框架中,`getCurrentSession()` 和 `openSession()` 都是用于获取与数据库交互的Session对象,但它们之间存在显著的区别。理解这些差异对于优化数据访问性能和管理事务至关重要。 首先,`...
在Hibernate中,`getCurrentSession()`是SessionFactory类的一个方法,它用于获取当前线程绑定的Session对象。这个方法在处理数据库操作时非常有用,因为每个HTTP请求通常对应一个独立的线程,每个线程都应该有自己...
在Spring中,我们可以使用`SessionFactory.openSession()`或`SessionFactory.getCurrentSession()`方法获取Session实例。 4. **事务管理**:Spring提供了声明式事务管理,只需在方法上添加@Transactional注解,即可...
- 错误2:`java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session` - 解决方案:由于Hibernate4移除了HibernateDaoSupport,需要改写DAO层,直接使用Hibernate...
在Spring中,我们可以使用SessionFactory的openSession()或getCurrentSession()方法获取Session实例。 4. **事务管理**: Spring提供PlatformTransactionManager接口,可以用来管理数据库事务。在Hibernate整合中,...
- 获取Session:通过SessionFactory的openSession()或getCurrentSession()获取Session实例。 - 开启事务:在Session上开始一个新的数据库事务。 - 对象操作:执行增删改查操作,如save()、update()、delete()、...
- 创建`Session`:`SessionFactory.openSession()`或`SessionFactory.getCurrentSession()`(在已配置的事务环境下)。 - 事务开始:`Session.beginTransaction()`。 - 数据操作:如`Session.save()`, `Session....
本文详细介绍了 Hibernate 中 Session 的关闭实例解析,包括 getSession() 和 openSession() 的区别、getCurrentSession() 的配置、openSession() 和 getCurrentSession() 的关联,以及 Session 的关闭。希望本文...
- **创建(Create)**:在Hibernate中,创建新记录通常是通过调用Session的`save()`方法来完成的。 ```java Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); ...
本文详细介绍了Hibernate框架中的核心配置文件`hibernate.cfg.xml`及其配置项、映射文件`xxx.hbm.xml`,以及核心API如Configuration和SessionFactory的使用方法,并对C3P0连接池进行了简要说明。通过这些内容的学习...
在Hibernate中,我们可以使用Session工厂(SessionFactory)和Session对象来实现。SessionFactory是线程安全的,用于创建Session对象,而Session是数据库会话,用于执行CRUD操作。 ```java private SessionFactory ...
然而,在CMT环境中,由于单个session bean可能会被多个线程并行调用,使用`SessionFactory`的`getCurrentSession()`方法更为推荐,因为它能自动管理`Session`的生命周期,并确保线程之间的隔离性。 总之,理解...
6. Hibernate框架中的SessionFactory类:SessionFactory类提供了两个获得session的方法,分别是openSession()和getCurrentSession()。这两个方法的区别在于,openSession()方法可以在一个线程中使用不同的Session,...
通过SessionFactory.openSession()或getCurrentSession()方法获取Session实例。 五、持久化操作 1. 插入:使用Session的save()或saveOrUpdate()方法插入新记录。 2. 更新:调用Session的update()或saveOrUpdate()...
- `getCurrentSession()`方法则会在当前线程中获取一个Session,如果当前线程没有Session,则会自动创建一个新的Session。这种方式适用于需要跨多个方法调用的事务管理。 #### 四、Hibernate生命周期状态 - **瞬...
在这个例子中,首先通过SessionFactory获取当前的Session,然后调用Session的save方法将对象保存到数据库中。 2. 配置文件hibernate.cfg.xml的配置示例: ```xml <hibernate-configuration> <!-- Database ...
11. Hibernate中getCurrentSession和openSession的区别是什么? `getCurrentSession`是用于在已有的事务上下文中获取或创建Session,确保与当前事务的一致性。而`openSession`则是直接创建一个新的Session,不考虑...