当讨论Hibernate的Session时,都是在讨论它做为Hibernate的一级缓存出现,当然这是它的功能,但也仅仅是它提供的功能之一,而且是一个附带功能, 就像Class.forName(),它的功能是加载一个类型并将此类型的Class对象返回,可是更多的时候我们都忽略了它的返回值,只知使用它会引起类加载的功能.现在你还记得Session的功能除了做为Hibernate的一级缓存之外的其它功能吗...
它所提供的功能要从它所解决的问题入手,我们先来看一下它所关注的问题。问题就是数据存取当中的行为问题。行为问题指的是如何让各种对象从数据库中读取出来以及保存到数据库中。在这一过程中需要注意的问题。
- 首先的一个问题就是并发问题,当你从数据库中读取一条数据出来,可是就在此时,其它人也读取了这条数据,如果都是仅仅读取,那问题不大,但如果都修改呢,同时修改共享资源,并发问题就出现了,这就需要要保证这一过程是在一个事务范围内。
- 从数据库中加载记录,在这一操作范围内需要保证只有一个对象和数据库中的这条记录相对应,应该将其理解为:从数据库中加载记录到一个对象的这个操作过程其实是从数据库到应用程序内的延伸,虽然执行位置换了,但它们都要做出一致的承诺。
- 读取出一个对象后你很可能希望修改下对象的状态,这时要跟踪对象的状态变化,生成相应的sql语句。
- 对于新建行的的id重新获取。
- 对象与对象是有依赖关系的,对象之间很容易表达双向关联,但数据库只能表达单向关联。双向关联的对象应该根据其中一方的状态生成sql语句,避免无谓的sql语句。查询对象时,因为是关联的,会连带查询出很多对象,有些是不必要的,应使用延迟加载来防止程序不会使用到的对象被查询出来。
- 按排sql语句的执行顺序,insert、update、delete的先后顺序,及级联操作时的行为。保证插入时首先插入主表数据,其次是从表数据,删除时首先删除从表数据,其次是主表数据。还包括其它更丰富的的级联更新行为。
Session都很好的解决上面的六点问题。
session中对象的标识符和数据库中的主键相对应,Session会在其内部维护一个哈希表,当从数据库查询出一条记录,它会首先检查哈希表中是否有之条记录相应的对象。存在所查对象就直接从哈希表中取出, 不存在相应对象就把当前查出的对象添加到哈希表中,并返回此对象。
Session如何判断对象的状态是否发生了改变呢?它用一种快照的方式。就是当查询出一条记录后,会在内存中生成一个相应的的对象,然后保留这个对象的一个拷贝,当对象状态改变后,Session根据变化后的状态和留有的对象拷贝进行快照对比,以生成相应的sql语句。当事务提交之前,Session整理这一组sql语句,按照正确的顺序作为一个批处理进行执行。在跟踪对象状态时,需要将当前对象缓存。但一定要记住,进行缓存的主要目的在于保持与数据库的一致性,而不是提高性能。
分享到:
相关推荐
nosession模式并不意味着完全不使用Hibernate,而是尽量减少对Session的依赖,转而使用其他API,例如Query或Criteria API来执行数据库查询。 在实际的代码案例中,我们可以利用SessionFactory的openSession()方法来...
3. **会话工厂与会话**:SessionFactory是线程安全的,负责创建Session对象,而Session是与数据库交互的入口,执行CRUD操作。 4. **查询语言**:HQL(Hibernate Query Language)是面向对象的查询语言,类似于SQL,...
例如,创建SessionFactory、开启Session、执行查询、保存或更新实体等。同时,Hibernate还支持第二级缓存,可以提高数据读取速度。此外,其强大的查询语言HQL和Criteria API提供了灵活的数据检索方式。 总之,`...
1. **Session接口**:它是Hibernate的主要工作接口,提供了对数据库的操作方法,如保存、更新、删除对象,以及执行SQL查询。Session管理了对象的状态,并维护了一个缓存,用于优化数据访问性能。 2. **...
《深入理解Hibernate Core 5.0.11.Final.jar:源码剖析与应用实践》 Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将...
- **SessionFactory**:是线程安全的,用于创建Session实例,它是整个Hibernate的核心,管理实体类和数据库表的映射信息。 - **Session**:是操作数据库的入口,提供了一种基于对象的操作方式,支持CRUD操作,并...
4. **第二级缓存**:除了默认的一级缓存外,Hibernate还支持插件式第二级缓存,能够跨Session存储数据,提高数据读取效率。 5. **JPA支持**:Hibernate不仅作为一个独立的ORM框架,也完全兼容Java Persistence API...
5. 数据访问:通过SessionFactory的openSession()方法获取Session,然后进行CRUD操作。 总结来说,Hibernate-CGLIB的结合使用为Java开发带来了便利,通过动态生成的代理对象,实现了对象的懒加载和透明持久化。而...
《Hibernate 5.0.0.Final:深度解析与应用》 Hibernate,作为一个开源的对象关系映射(ORM)框架,自发布以来就深受Java开发者喜爱。本次我们将深入探讨的版本是`hibernate-release-5.0.0.Final(1)`,这个版本在...
10. **缓存机制**:Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的)以提高性能,减少对数据库的直接访问。此外,还可以集成第三方缓存服务如EHCache。 总之,Hibernate 4.2.4....
《Hibernate ORM 5.3.2.Final:深入解析与应用》 Hibernate ORM,作为Java领域最著名的对象关系映射框架之一,自诞生以来就深受开发者喜爱。2018年7月5日,Hibernate发布了其最新版本——5.3.2.Final,带来了诸多...
2. **会话管理**:Hibernate的Session接口是与数据库交互的主要接口,它负责保存、更新、删除和加载实体。Transaction接口则用于管理数据库事务,确保数据操作的原子性和一致性。 3. **缓存策略**:Hibernate提供了...
- `hibernate-core.jar`: 包含了 Hibernate 的核心组件,如 Session、SessionFactory、Query 等,提供了基本的 ORM 功能。 - `hibernate-entitymanager.jar`: 提供 JPA 1.0 和 2.0 规范的实现,使得使用 JPA 开发...
2. **Session管理**: Hibernate的Session接口是数据访问的主要入口,它提供了事务处理、缓存管理和数据库操作等功能。通过Session,我们可以实现对象的持久化,以及在持久化过程中的状态管理。 3. **查询语言(HQL...
在实际应用中,开发者通常会结合这些jar包,通过配置文件(如hibernate.cfg.xml)指定数据库连接参数、实体映射等信息,然后利用SessionFactory创建Session实例,进行数据库操作。此外,Hibernate还支持HQL...
`Session`是Hibernate的主要工作接口,它提供了与数据库交互的方法,如保存、更新、删除对象,以及执行SQL查询。`Session`对象代表了一个数据库会话,它是短生命周期的,通常在一个单元操作中创建并关闭。 4. **...
描述中的“spring5+hibernate5+Spring-session-data-redis2+Spring-data-redis2整合”进一步扩展了集成环境,引入了Hibernate 5作为ORM(对象关系映射)工具,Spring-session-data-redis和Spring-data-redis2则是...
- hibernate-core.jar:这是Hibernate的核心库,包含了许多核心接口和实现,如Session、SessionFactory、Query等。 - antlr-2.7.7.jar:提供了解析和生成SQL的能力,是Hibernate生成动态SQL的关键。 - dom4j-...
4. 创建SessionFactory:根据配置文件创建SessionFactory实例,它是Hibernate的核心,用于生成Session。 5. 操作数据库:通过SessionFactory获取Session,进行CRUD操作。 **四、优势** 1. 简化配置:通过注解方式...