原来在做jbpm工作流时老是出现session的问题出现异常,算是办法也简单session.close(),原因是我在sevice层openSession而忘记关闭,每写一个方法都必须这样。而采用getCurrentSession的话就不需要了,现总结两者间的区别:
1. 如果使用的是getCurrentSession来创建session的话,在commit后,session就自动被关闭了, 也就是不用再session.close()了。但是如果使用的是openSession方法创建的session的话,那么必须显示的关闭session,也就是调用session.close()方法。这样commit后,session并没有关闭。
2. 使用SessionFactory.getCurrentSession()需要在hibernate.cfg.xml中如下配置:
* 如果采用jdbc独立引用程序配置如下:
<property name="hibernate.current_session_context_class">thread</property>
* 如果采用了JTA事务配置如下
<property name="hibernate.current_session_context_class">jta</property>
分享到:
相关推荐
当我们调用SessionFactory().getCurrentSession()时,Hibernate会为我们提供一个已存在的或者新创建的Session实例,这个行为与直接调用SessionFactory.openSession()有所不同。`getCurrentSession()`方法旨在支持...
在Java的Hibernate框架中,`getCurrentSession()` 和 `openSession()` 都是用于获取与数据库交互的Session对象,但它们之间存在显著的区别。理解这些差异对于优化数据访问性能和管理事务至关重要。 首先,`...
Assert.assertNotNull(sessionFactory.openSession()); } 2,配置声明式事务(使用基于注解的方式) 1,配置 <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework....
Session session = sessionFactory.getCurrentSession(); session.save(user); } ``` 7. 整合测试: 使用JUnit或者其他的测试框架,编写测试类,通过Spring的`@ContextConfiguration`注解加载配置,然后使用`...
- 创建`Session`:`SessionFactory.openSession()`或`SessionFactory.getCurrentSession()`(在已配置的事务环境下)。 - 事务开始:`Session.beginTransaction()`。 - 数据操作:如`Session.save()`, `Session....
在Spring中,我们可以使用`SessionFactory.openSession()`或`SessionFactory.getCurrentSession()`方法获取Session实例。 4. **事务管理**:Spring提供了声明式事务管理,只需在方法上添加@Transactional注解,即可...
Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = new User(); // set user properties... session.save(user); tx.commit(); session.close(); ``` #...
Session session = sessionFactory.getCurrentSession(); session.save(stu); } // 其他方法省略 } ``` #### 总结 通过上述内容的学习,我们可以看出Hibernate作为一款强大的ORM框架,极大地简化了数据库...
Session session = sessionFactory.openSession(); ``` 3. **DAO(Data Access Object)**: DAO设计模式用于封装数据库访问逻辑,确保业务逻辑与数据访问层解耦。我们可以创建一个`UserDAO`接口和实现类,用于处理...
- **Session**是与数据库交互的主要接口,`sessionFactory.openSession()`会创建一个新的Session,需要手动关闭;`sessionFactory.getCurrentSession()`则会在已有的事务上下文中获取或创建Session,自动管理关闭。...
2. **为什么使用getCurrentSession()**:与直接调用`openSession()`创建新的Session相比,`getCurrentSession()`有以下优势: - 它能够自动管理Session的生命周期,比如在请求结束时关闭Session,避免资源泄露。 -...
- 错误2:`java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session` - 解决方案:由于Hibernate4移除了HibernateDaoSupport,需要改写DAO层,直接使用Hibernate...
Session session = sessionFactory.getCurrentSession(); SQLQuery query = session.createSQLQuery("SELECT id, name FROM User WHERE age > :age") .addScalar("id", Hibernate.LONG) .addScalar("name", ...
Session session = sessionFactory.getCurrentSession(); // Hibernate 的所有操作都必须在事务中 Transaction transaction = session.beginTransaction(); Person p = new Person(); p.setName("111111111111111...
Session session = sessionFactory.openSession(); ``` 代码展示了如何从配置文件中读取配置信息,构建SessionFactory,再通过SessionFactory来创建Session。 4. ORM映射文件(.hbm.xml)的示例: ```xml <!...
8. getCurrentSession()和openSession()的区别: - getCurrentSession()会检查当前线程是否已有Session,若有则返回,若无则创建。 - openSession()方法总是创建一个新的Session。 - getCurrentSession()在事务...
return sessionFactory.openSession(); } } ``` #### 四、连接池配置 - **C3P0 连接池**:Hibernate支持多种连接池,其中C3P0是一种常用的连接池管理器。 - **配置方式**:在`hibernate.cfg.xml`中添加C3P0...