1.文章转载于:http://www.techrss.cn/html/2008/04-08/79497.htm
2.1 Hibernate实体对象的三种状态
(1)Transient:所谓Transient就是说实体对象在内存中存在,与数据库的记录无关。
(2)Persient:Persient对象对应数据库中的一条记录,也可以这样子理解,如果一个实体对象与某个session发生关联,并处于对应session的有效期内,那么它就处于Persient状态。
(3)Detached:所谓Detached就是处于Persient状态对应的session关闭之后的状态。
我们平时所说的PO(持久化对象)指的是位于Persient状态的对象,而VO(值对象)就是指Transient和Detached状态的对象。
2.2CRUD
(1)save()方法,调用save方法时,首先会在session缓存中查找保存对象,如果实体对象已经处于Persient状态,则直接返回,否则执行SQL操作,将保存的实体对象加入session缓存中(save方法不会把实体加入到二级缓存的),最后对存在的级联关系进行递归处理。
(2)saveOrUpdate()方法:和save一样首先在session缓存中查找,判断对象是否为保存状态,如果对象处于Persient,不执行操作,处于Transient执行save操作,处于Detached调用save将对象与session重新关联。
这里要注意的是在批量操作时要适时地对session进行flush操作,避免出现OutOfMemoryError。(开发中设置一个计数器,到达某个临界值的时候就清空一次就可以啦)
2.3 查询
查询是受缓存影响最大的。
(1)session的load()和get():这两者的区别主要是load会在二级缓存中查找,而get在内容缓存中查找不到的话将跳过二级缓存直接进行SQL操作。
(2)Query的list()和iterate()方法:list实际上无法使用缓存,它对缓存只写不读,而iterate则是首先查找所有符合条件的id(首先在本地缓存中查找)在执行相应的select获得对应记录,iterate方法的使用是查找的实体对象在缓存中已经存在了,否则查询性能很低,容易产生N+1现象
分享到:
相关推荐
**Hibernate简介** Hibernate是一个强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得...`testHiberbateJava`项目就是一个很好的学习资源,通过实际操作,你可以更深入地理解Hibernate的CRUD操作。
**标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...
当 Session 执行 CRUD 操作时,对象会自动放入一级缓存,当事务提交时,这些对象会被同步到数据库。一级缓存的生命周期随着 Session 的关闭而结束,这确保了数据的一致性。 二级缓存则是一个可配置的、进程范围的...
Hibernate是JPA的一个实现,提供了丰富的特性和优化,如缓存机制、第二级缓存、查询语言HQL等。 在审计日志的实现中,一种常见方法是使用AOP(面向切面编程)。AOP允许我们在不修改原有业务逻辑的情况下,添加额外...
在本项目中,Hibernate可能用于映射Groovy领域模型到数据库表,执行CRUD操作,以及提供缓存和事务支持。 这个项目将这些技术结合在一起,创建了一个完整的MVC(Model-View-Controller)架构。开发者可以通过Groovy...
描述中提到的链接可能是对Hibernate缓存机制的详细技术博客,但具体内容未给出。因此,我们将基于常规的Hibernate缓存知识进行解释。 **一、Hibernate一级缓存** 一级缓存是每个Hibernate Session内的缓存,它是一...
每当我们在Session中进行对象的CRUD(创建、读取、更新、删除)操作时,这些操作实际上并未立即同步到数据库,而是被暂时保存在一级缓存中。一级缓存的特点如下: - **生命周期与Session一致**:一级缓存的生命周期...
以上就是使用SpringMVC、Hibernate、MySql和EasyUI实现CRUD操作的基本步骤和原理。这个组合为开发高效、可维护的Web应用提供了一个强大且灵活的基础架构。在实际项目中,还需要考虑异常处理、安全性、性能优化等更多...
**hibernate缓存策略详解** Hibernate作为Java领域中广泛使用的ORM框架,其在处理大量数据时,为了提高性能和减少数据库的访问压力,引入了缓存机制。本文将深入探讨Hibernate的缓存策略,包括一级缓存、二级缓存...
以上就是Hibernate的基本配置和CRUD操作的介绍。通过这些操作,我们可以轻松地在Java应用中处理数据库数据,而无需直接编写SQL语句,极大地提高了开发效率和代码的可维护性。在实际项目中,还需要注意事务管理、性能...
2. **查询语言HQL**:提供了类SQL的查询语言,用于检索和操作数据。 3. ** Criteria查询**:提供动态构建查询的能力,无需编写SQL。 4. **缓存机制**:支持二级缓存,提高数据访问速度。 **CRUD操作** CRUD是数据库...
在配置Hibernate缓存时,需要明确哪些实体或查询结果应该缓存,并设置相应的缓存策略。例如,我们可以使用`@Cacheable`注解标记实体类,使用`@Cache`注解来定义缓存区域和策略。同时,对于查询结果的缓存,可以使用`...
在IT行业中,Hibernate是一个非常重要的Java持久层框架,它提供了对象关系映射(ORM...这个项目可能涵盖了ER图设计、实体类创建、配置文件设置、以及各种CRUD操作的示例代码,是学习和实践Hibernate CRUD操作的好资源。
当我们在Session中对对象进行 CRUD(创建、读取、更新、删除)操作时,这些对象会被自动放入一级缓存中。一级缓存的作用在于避免频繁的磁盘I/O操作,提高数据访问速度。当Session关闭时,一级缓存中的数据将被清除。...
在执行 CRUD 操作时,`SessionImpl` 的具体方法,如 `load()`, `save()`, `update()`, `delete()` 等,会涉及到一级缓存的管理。例如,`load()` 方法加载实体时,会先检查一级缓存,如果实体已经存在,则直接返回,...
每次当我们通过Session对象进行CRUD(创建、读取、更新、删除)操作时,Hibernate都会在一级缓存中处理这些对象。例如,当你从数据库中加载一个实体时,它会被放入一级缓存;当你修改这个实体并调用flush()方法时,...
当我们在Session中对实体进行CRUD操作时,数据会首先被缓存到一级缓存中,同一Session内的后续查询会优先从一级缓存中获取数据,避免了频繁访问数据库。 2. **二级缓存(Second-Level Cache)**:一级缓存的局限...
本文将深入探讨Hibernate如何进行CRUD(创建、读取、更新、删除)操作,帮助开发者更好地理解和运用这个工具。 **一、创建(Create)** 在Hibernate中,创建新记录通常涉及以下步骤: 1. **配置Hibernate**:首先...
当我们在 Session 中执行 CRUD 操作时,数据会被放入这个缓存。例如,当我们使用 `session.get()` 方法获取对象时,如果对象已经存在于缓存中,Hibernate 就不会向数据库发送查询请求。在上面的示例中,尽管我们两次...