`

(学习笔记)Hibernate的一级缓存

 
阅读更多

1、只读需要加事务么?加事务会不会影响速度了?

     锁和不锁区别, 速度上没有影响,建议加事务。

2、hibernate的缓存

     一级缓存——Session

     二级缓存——Cache Concurrency Strategy、 Query Cache、 Cache Provide

 

一级缓存

1、一级缓存就是Session(Map). 一个session生命长度与事务相对应,他是必要的,不能被关闭,并且他能保证一个事务中id号的(唯一),Map的key就是存放对象的主关键字。

2、无论进行对象的save(),update(), saveOrUpdate(),还是load(), find(), list(), iterate(),filter(),这些对象都会被放进缓存中(key, value),一旦flush方法调用,这些对象的状态将与数据库同步。

3、当你load100000个对象,则可能发生"OutOfMemoryException"异常。我们怎么能够使用Hibernate处理这种大量对象批量处理操作了?我们的观点是ORM不适合处理update、delete批量处理。如果你想进行这类操作,有一种更好的手段:使用数据库的存储过程 或者 直接使用SLQ UPDATE 和 Delete语句。如果你非得要用Hibernate进行大批量操作,一旦操作完成立马执行evict操作,释放缓存。(不要把所有的数据都放入缓存)

4、完成所有对象的evict操作,我们调用Session.clear()方法,一般很少用,但是用的时候,作用很大的。

 

-=-=-=-=-=-=-=-=-=-=-=-=DML语句的问题-=-=-=-=-=-=-=-=-=-=-=-=

对于更新,删除DML语句,尽量别使用hql,容易引起不同步

 

举例:

User user = userService.getUserById(userId);//通过get的方式获取,此时username=“张三”

这时候缓存中有user对象了

接着:

 

String hql = "update User u set u.username=李四",然后是有excuteUpdate方式来更新

 

再接着:

User user = userService.getUserById(userId);?你猜此时的username=?  张三

 

测试发现,最后一句没有发出sql语句,明显是从缓存中获取的,那就是之前的那个对象

 

我们知道,如果使用userService.save(user);,user前后的内容跟数据库会保持同步,

 

但是hql语句执行更新了数据库,并没有让持久类的对象user与数据库中保持同步。

 

问题可能:如果我这边执行hql一更新,你缓存中的对象就要同步的话,会加大hibernate的压力,2w条数据,hiberante缓存就要更新两万个对象,不好。。

 

对于save,就没有这个问题。。。。。

分享到:
评论

相关推荐

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    达内内网学习笔记 hibernate

    5. **java_hibernate_day05.pdf** - 最后一天的学习可能涵盖了高级主题,如关联映射(一对一、一对多、多对多)、懒加载、缓存机制(一级缓存和二级缓存)以及事务管理。这些内容帮助开发者更好地理解和优化应用程序...

    Hibernate学习笔记特别详细

    《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),...查询的优化,一级缓存,二级缓存,批量查询,注解方式

    hibernate框架开发2016版视频 四天学习笔记完整版

    - 缓存机制:介绍Hibernate的一级缓存(Session级别)和二级缓存(SessionFactory级别),以及如何配置和利用缓存提高性能。 - 事务管理:讨论Hibernate如何支持事务,以及如何在代码中控制事务的提交和回滚。 - ...

    hibernate个人学习笔记完整版

    同时,缓存机制,如一级缓存(First Level Cache)和二级缓存(Second Level Cache),也将被详细讨论,它们对于提高应用程序性能至关重要。 最后,笔记可能会涉及Hibernate的其他特性,如事件监听器、拦截器、查询...

    hibernate框架学习笔记整理

    ### hibernate框架学习笔记整理 #### 一、Hibernate框架简介 **Hibernate框架**是一种用于Java应用的**对象关系映射**(Object-Relational Mapping, ORM)解决方案,它允许开发者使用面向对象的方式操作数据库中的表...

    Hibernate3.3_学习笔记.doc.zip

    一级缓存是Session级别的,自动管理对象的状态;二级缓存则可跨Session共享,通常由第三方插件如Ehcache提供支持。正确配置和使用缓存能有效减少数据库访问。 八、性能优化 学习Hibernate3.3,需要关注性能优化技巧...

    Hibernate学习笔记与总结

    - **缓存机制**: Hibernate支持一级缓存(Session级别)和二级缓存(SessionFactory级别),提高性能。 - **懒加载和立即加载**: 控制关联对象的加载时机,优化内存使用。 - **多态性支持**: 可以直接根据父类...

    hibernate API帮助文档 及hibernate学习笔记

    - 第一级缓存:Session级别的缓存,每个Session都有自己的缓存,存储了最近访问过的对象。 - 第二级缓存:SessionFactory级别的缓存,可以跨Session共享,常使用第三方缓存提供商如Ehcache。 - 查询缓存:存储...

    传智播客2016hibernate框架学习笔记

    8. **缓存机制**:Hibernate提供了一级缓存和二级缓存,能有效减少数据库访问,提高应用性能。 9. **实体生命周期**:Hibernate定义了持久化对象的生命周期状态,包括临时态、瞬时态、持久态和脱管态,理解这些状态...

    Java相关课程系列笔记之十四Hibernate学习笔记

    【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...

    hibernate学习笔记第二天的源码

    在深入探讨Hibernate学习笔记第二天的源码之前,我们先来理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象模型,大大简化了数据访问层的开发...

    Hibernate3 学习笔记.ppt

    5. 使用二级缓存,提高应用性能。 6. 谨慎使用级联操作,防止数据冗余或异常。 【八、Hibernate Tool】 Hibernate Tool是一组工具,包括了反向工程(Reverse Engineering)可以自动生成Java实体类和映射文件,以及...

    hibernate第一天笔记

    一级缓存是默认开启的,它的生命周期与`Session`相同,存储的对象在内存中,减少了与数据库的交互。而二级缓存则是在`SessionFactory`级别,虽然现在更多地被Redis等分布式缓存替代,但在某些场景下仍有一定价值。 ...

    hibernate学习笔记mashibing

    《Hibernate学习笔记——马士兵教程解析》 在Java开发领域,ORM(Object-Relational Mapping)框架的使用已经非常普遍,其中Hibernate作为一款优秀的ORM框架,因其强大的功能和易用性深受开发者喜爱。本文将根据马...

    马士兵hibernate学习笔记(原版)

    7. **性能优化**:Hibernate的性能优化主要包括缓存机制(第一级缓存、第二级缓存)、批处理、延迟加载等策略,通过合理设置和使用,可以显著提高应用程序的运行效率。 8. **Annotation与XML配置**:Hibernate支持...

    Hibernate学习笔记!

    **Hibernate学习笔记** Hibernate是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。本笔记将深入探讨Hibernate的核心概念、配置、实体管理、查询语言以及最佳实践...

    Hibernate+学习笔记

    Hibernate 内置了二级缓存,包括一级缓存(Session 缓存)和二级缓存(SessionFactory 缓存)。一级缓存是每个 Session 独有的,而二级缓存是所有 Session 共享的,可进一步提高数据访问速度。 11. **实体关系映射...

Global site tag (gtag.js) - Google Analytics