Hibernate获得Session的两个方法
大家都知道,使用Hibernate对数据进行操作最重要的是获得一个Session。
首先获得一个SessionFactory,通过.config().buildSessionFactory(),获得一个SessionFactory
进而取得Session的方法在Hibernate里有两种:
1:Session session = sessionFactory.openSession();
该种方法是创建一个新的session,不论当前的环境中是否已经创建,都会创建;
且当session提交成功后,需要手动关闭这个session;
2:Session session = sessionFactory.getCurrentSession();
该方法是获取当前环境中的session,若环境中已经存在session,则取出当前的;若无session则创建一个新的,
只要当前的session提交后,该session会自动关闭,其后再使用getCurrentSession()方法,则是创建一个新的session;
使用以上两种方式还需要注意的是事务控制,如果使用第一种方法,openSession()也许会导致数据的不一致,
例如在用户管理功能模块中,我们对用户的各种操作都需要做日志记录,此时要两张数据表同时提交成功,否则都不进行数据的写入;所以我们要使用第二种方式来取得session。
特别强调:这两种取得Session的方法不能混用。原因很简单,在Hibernate中,Session是一个接口。两个获取session的方法并非是同一个实现,故不可混用!
分享到:
相关推荐
在Java的持久化框架Hibernate中,`Session`和`Transaction`是两个至关重要的概念,它们在数据管理和事务处理中起到核心作用。这篇文章将深入解析这两个概念及其相关知识点。 `Session`是Hibernate提供的一种与...
Hibernate中获取Session的两种方式代码示例 Hibernate 是一个流行的基于Java的持久层框架,提供了对数据库的访问和操作。Session 是 Hibernate 中一个核心概念,负责管理应用程序与数据库之间的交互。获取 Session ...
- **`createQuery(String queryString)`** 和 **`createSQLQuery(String queryString)`**:这两个方法分别用于创建基于HQL(Hibernate查询语言)和原生SQL的查询。HQL提供了一种面向对象的查询方式,而原生SQL则直接...
在 Hibernate 中,有两个方法可以获取 Session:getSession() 和 openSession()。这两个方法都可以用于获取 Session,但是它们之间存在一些关键的区别。 getCurrentSession() 方法会将 Session 绑定到当前线程中,...
Hibernate有两级缓存:一级缓存(Session级缓存)和二级缓存(SessionFactory级缓存)。一级缓存默认开启,它是自动的,当对象在Session中被修改并提交后,这些变化会被立即写入数据库。二级缓存则需要手动配置和...
本文将深入研究Hibernate中的`Session`和`Transaction`,这两个概念是理解Hibernate工作原理的关键。 首先,让我们了解`Session`。在Hibernate中,`Session`充当了应用程序与数据库之间的桥梁,它是持久化操作的...
在类中,`currentSession()`方法用于获取或创建当前线程的Session。 ```java public static Session currentSession() throws HibernateException { Session session = (Session) threadLocal.get(); if ...
- 如果涉及到两个表的操作,例如用户(User)和角色(Role),可以通过@ManyToOne, @OneToOne, @OneToMany, @ManyToMany等注解定义关联关系。 - 在Service中,可以一次操作多个实体,比如添加用户时同时为其分配...
这两个类型常用于存储图像、视频、大文本等数据,因为它们可以容纳超过数据库标准列大小限制的数据。下面我们将深入探讨Hibernate对BLOB和CLOB的操作。 首先,我们来看一下如何在数据库中创建包含BLOB和CLOB字段的...
- 读取(Read):`Session.get()`或`Session.load()`用于根据主键获取对象,而`Query`或`Criteria`接口则支持更复杂的查询。 - 更新(Update):通过`Session.update()`或`Session.saveOrUpdate()`更新已存在的...
在Java Web开发中,Spring和Hibernate是两个非常重要的框架,它们分别处理依赖注入和对象关系映射(ORM)。本文将详细探讨Spring与Hibernate的集成,特别是如何在集成环境中使用和管理`Session`。 首先,Spring作为...
这两个方法都是用于从数据库中获取单个对象。`get`方法直接返回一个实体对象,如果数据库中没有找到对应ID的数据,则返回null。而`load`方法返回的是一个代理对象,即使数据库中没有对应的记录,它也会返回一个空的...
本文将深入探讨这两个主题,以帮助开发者更好地理解和利用Hibernate。 首先,让我们聚焦于Hibernate的缓存机制。缓存的存在是为了减少对数据库的直接访问,从而提高应用程序的性能。在Hibernate中,缓存分为一级...
通过实践"STRUTS+HIBERNATE 小例子"这个项目,你可以深入理解这两个框架的使用方法和它们之间的协作机制,进一步提升你的Java Web开发能力。这个小工程将提供一个实际的应用场景,帮助你更好地消化理论知识,并为...
在本案例中,你会看到如何在MyEclipse和Eclipse两个集成开发环境中配置和使用Hibernate。这两个IDE都是Java开发者常用的工具,它们提供了丰富的功能,包括项目管理、代码编辑、调试以及对各种框架的支持。 首先,你...
1. 配置拦截器:在Struts2的配置文件中,我们需要添加一个专门处理Hibernate Session的拦截器,如`OpenSessionInViewInterceptor`。这个拦截器会在请求开始时打开Session,在请求结束时关闭Session,确保Session在...
在IT行业中,Spring和Hibernate是两个非常重要的框架,Spring是一个全面的后端开发框架,而Hibernate则是一个对象关系映射(ORM)工具,主要用于数据库操作。当我们将它们整合在一起时,可以实现强大的数据访问能力...
在 Hibernate 框架中,SessionFactory 和 ConnectionProvider 是两个非常重要的组件,了解它们的实现机制对于深入了解 Hibernate 的工作原理具有重要意义。本文将通过分析 Hibernate 的源代码,来了解 ...
删除数据的方法涉及到两个参数:待删除的对象类型`o.class`和对象的主键`id`。首先,同样获取Session并开始事务,然后通过`session.get()`根据类名和主键获取数据库中的对象。如果对象存在,则调用`session.delete(o...
本篇文章将深入探讨Hibernate框架中常用的jar包以及两个核心配置文件。 一、Hibernate常用jar包 1. **hibernate-core.jar**:这是Hibernate的核心库,包含了所有必要的API和实现,包括Entity管理、Session接口、...