Hibernate学习之路(5) Hibernate一级缓存与快照区

新手必看:运算放大器为什么不能随便做电压跟随?从OPA552振荡案例学稳定性设计 本文通过OPA552振荡案例深入解析运算放大器稳定性设计,揭示电压跟随器隐藏的振荡风险。重点讲解伯德图分析方法,帮助工程师识别相位裕度不足等关键问题,并提供数据手册参数解读与稳定性改造方案,避免电路设计中的常见陷阱。 阅读详情

Hibernate中提供了两级缓存,一级缓存是Session级别的缓存,它属于事务范围的缓存,该级缓存由hibernate管理,应用程序无需干预;二级缓存是SessionFactory级别的缓存,该级缓存可以进行配置和更改,并且可以动态加载和卸载,hibernate还为查询结果提供了一个查询缓存,它依赖于二级缓存;

一,缓存的概念

缓存是位于应用程序和永久性数据存储源之间用于临时存放复制数据的内存区域,缓存可以降低应用程序之间读写永久性数据存储源的次数,从而提高应用程序的运行性能;

hibernate在查询数据时,首先会到缓存中查找,如果找到就直接使用,找不到时才从永久性数据存储源中检索,因此,把频繁使用的数据加载到缓存中,可以减少应用程序对永久性数据存储源的访问,使应用程序的运行性能得以提升;

二,缓存的范围

缓存范围决定了缓存的生命周期,缓存范围分为3类:

1>事务范围

缓存只能被当前事务访问,缓存的生命周期依赖于事务的生命周期,事务结束时,缓存的生命周期也结束了;

2>进程范围

缓存被进程内的所有事务共享,这些事务会并发访问缓存,需要对缓存采用必要的事务隔离机制,缓存的生命周期取决与进程的生命周期,进程结束,缓存的生命周期也结束了;

3>集群范围

缓存被一个或多个计算机的进程共享,缓存中的数据被复制到集群中的每个进行节点,进程间通过远程通信来保证缓存中数据的一致性;

在查询时,如果在事务范围内的缓存中没有找到,可以到进程范围或集群范围的缓存中查找,如果还没找到,则到数据库中查询;

三,Hibernate中的第一级缓存

Hibernate的一级缓存由Session提供,只存在于Session的生命周期中,当应用程序调用Session接口的save(),update(),saveOrupDate(),get(),load()或者Query和Criteria实例的list(),iterate()等方法时,如果Session缓存中没有相应的对象,hibernate就会把对象加入到一级缓存中,当session关闭时,该Session所管理的一级缓存也会立即被清除;

 /*
     * 证明一级缓存确实存在
     * 
     */
    @Test
    public void test01(){
    Session session = HibernateUtil.openSession();
    Transaction tx = session.beginTransaction();
    //根据id查找客户
    Customer customer1 = session.get(Customer.class, 1);//先去数据库查询,并把查询结果存入一级缓存中
    System.out.println(customer1);
    //再次根据id查找客户
    Customer customer2 = session.get(Customer.class, 1);//先在一级缓存查找
    System.out.println(customer2);

    //结果为true,证明两个对象是同一个,表示customer1已经存入缓存中
    System.out.println(customer1==customer2);

    tx.commit();
    session.close();//session关闭了,一级缓存就消失了


    }

一级缓存

四, 快照区

 public void test02(){
    Session session = HibernateUtil.openSession();
    Transaction tx = session.beginTransaction();
    //根据id查找客户
    Customer customer = session.get(Customer.class, 2);
    System.out.println(customer.getCustAddress());//地址为  广州 
    //修改客户的地址为"北京"
    customer.setCustAddress("北京");
    System.out.println(customer.getCustAddress());
    //没有使用session.update
    tx.commit();
    //关闭session
    session.close();

    System.out.println(customer.getCustAddress());
    /*
     * 那么三个输出的地址是什么
     * 广州           北京        北京
     * 同时数据库中的客户地址也变为了北京
     */
    }

为什么会出现这种情况呢?就是因为快照区的存在.

揭秘cocos-mcp:如何用AI助手提升CocosCreator游戏开发效率 本文深入介绍了cocos-mcp工具,它作为连接AI助手与CocosCreator编辑器的桥梁,遵循MCP协议,能显著提升游戏开发效率。通过自然语言指令,开发者可让AI直接查询场景结构、批量修改属性或生成上下文代码,将重复操作变为智能调度,实现从“手动操作者”到“指令指挥官”的工作流变革。 阅读详情

相关推荐

CMap数据库学习及结果可视化

CMap是一个生物信息学数据库和工具,旨在通过比较基因表达谱来揭示药物、基因和疾病之间的潜在关联。CMap数据库主要用于寻找药物、化合物和生物过程之间的关系,并用于药物重定位(drug repurposing)和疾病机制研究。

zfyyzhys的博客 5599

Hibernate的一级缓存与快照机制

第一、Hibernate的一级缓存 Hibernate的一级缓存指的是Session对象的缓存,一旦Session对象销毁了,则一级缓存也就消失了。 第二、测试类Test.java。 package com.demo; import org.hibernate.Session; import org.hibernate.Transaction; import com.demo.dto.Teacher; import com.demo.util.HibernateUtil; /** * 测试类 * @au

龙吟山庄 266

QuickFix Java 实战(一)协议解析、环境搭建与首个应用

本文是QuickFix Java实战系列的第一篇,详细介绍了FIX协议的核心原理与QuickFix/J引擎的实战应用。内容涵盖FIX协议的标签化通信机制、QuickFix/J库的两种下载方法、协议定义文件解析,并通过一个完整的模拟订单发送示例,指导读者快速搭建首个FIX应用环境,实现消息生成与会话通信。

dog123的博客 494

Hibernate框架之一级缓存与一级缓存快照

在上一篇博客 Hibernate框架之实体的三种状态 引入了session缓存的概念,下面将介绍一下一级缓存与一级缓存快照。 1、一级缓存 所谓一级缓存,又称为session级别的缓存(就是上一篇博客引入的session缓存)。当获得一次会话(session),hibernate在session中创建多个集合(map),用于存放操作数据(实体类的对象),为程序优化服务,如果之后需要相应的数据,...

hestyle的博客 358

DIY电磁炉核心驱动方案:IR2153PBF自振荡半桥芯片实战指南(附电路图)

本文详细介绍了IR2153PBF自振荡半桥驱动芯片在DIY电磁炉核心驱动方案中的实战应用。该芯片集成了振荡器与600V高压驱动能力,仅需少量外围元件即可生成互补带死区的PWM信号,极大简化了半桥逆变电路设计。文章深入解析了其工作原理、关键参数,并提供了完整的电路设计、PCB布局指南及调试步骤,帮助电子爱好者构建稳定高效的感应加热驱动核心。

beer8的博客 576

长安车机破解后能干啥?分享我的UNI-K车机安装第三方应用与优化体验实录

本文详细记录了长安UNI-K车机破解后的实用玩法与深度优化指南,包括安装第三方应用、导航体验升级、影音系统改造及系统美化等。通过工具箱和升级技巧,车主可以大幅提升用车体验,解锁更多隐藏功能。

weixin_33217202的博客 400

关于Hibernate一级缓存的快照问题

Hibernate中的一级缓存的底层是以Map形式存在的,key是主键,value是对象,所以它的泛型为Map,key的泛型为串行化是因为主键都可被序列化。简单说完一级缓存的底层原理,下面开始讲快照问题。        当程序调用get()方法时,Session会先在缓存区找有没有存在对应的对象,如果是第一次调用,这时缓存区是空的,自然就找不到,那么Session就会发送select语句向数据库

jalins的博客 2827

用WorkBuddy和ima搭建本地知识库:从概念到实操

在AI应用普及的今天,私有知识的高效管理与调用成为痛点。RAG(检索增强生成)技术通过将外部知识库与语言模型耦合,为精准问答提供了技术底座。然而,传统RAG方案往往涉及向量数据库、文本切分等复杂环节。一种更轻量的路径应运而生:借助WorkBuddy与ima的组合,将知识收集、语义检索与智能体工作流整合,让本地知识库真正服务于日常办公和研发场景。从概念到实操,系统解析这套轻量级方案的核心逻辑与配置方法,并对比重方案适用边界,帮助读者快速搭建属于自己的AI知识助手。

weixin_32830601的博客 412

Hibernate一级缓存-快照机制

案例:修改客户的名称 @Test publicvoid testUpdateName(){        //从Hibernate封装的工具类中获取Session对象        Sessionsession=HibernateUtil.openSession();        //开启事务        Transactiontx=session.beginTransact

站在风口上的猪 1643

Vivado新手避坑指南:搞懂Generate Output Products和Create HDL Wrapper到底在干啥

本文深入解析Vivado设计流程中的Generate Output Products和Create HDL Wrapper两大关键步骤,帮助新手理解其核心功能与操作要点。通过详细讲解文件生成类型、关键选项设置及常见问题解决方案,指导开发者正确使用这两个功能,避免设计流程中的常见错误,提高FPGA开发效率。

weixin_29207149的博客 308

OpenClaw实战:拒绝复制粘贴,用 xlsx 技能打通“带公式模板”的月报自动化

本文详解了如何利用 OpenClaw 框架搭载的 xlsx skill,解决 AI 自动化处理“带复杂公式与格式”Excel 月报时极易翻车的业务痛点。针对传统大模型粗暴写入导致模板报废的问题,OpenClaw 创新采用“双核微创”工作流:首先利用 pandas 高效清洗并聚合海量原始明细数据,随后切换至 openpyxl 将计算结果精准注入目标模板,完美保留原有的底色、边框与跨表动态公式。

我有一个梦想 150

Hibernate(二)一级缓存、快照机制和三种状态

11

Waylon的博客 6024

结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式

高速列车是现代交通运输的重要组成部分,其运行速度高、载客量大,对安全性和可靠性提出了极高的要求。轴箱轴承作为高速列车的关键部件之一,承担着传递载荷和支撑车轴的重要作用。然而,由于长期运行在高速、重载和复杂工况下,轴箱轴承容易出现疲劳磨损、润滑失效和裂纹等故障,从而影响列车的安全性。本项目旨在结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式。

xiaoheshang_123的博客 328

10分钟入门Hibernate的一级缓存

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。加入社区:https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

2401_86400201的博客 840

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Hibernate一级缓存

Hibernate一级缓存 1.缓存 缓存:是一种优化的方式,将数据存入到内存中,使用的时候直接从内存中读取,不用通过***存储源*** ###2.Hibernate 一级缓存 Hibernate提供了优化手段:缓存,抓取…等手段 一级缓存:Session级别的缓存,一级缓存的生命周期与Session一致(一级缓存是由一系列java集合构成,一级缓存是自带的,不可卸载),属于事务级缓冲 ...

mqy224512的博客 203

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Hibernate一级缓存和二级缓存详解

一、一级缓存二级缓存的概念解释 (1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个 session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。 (2)二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果

徐刘根的博客 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

hibernate一级缓存快照 刷新

快照:与一级缓存一样的存放位置,对一级缓存数据备份。保证数据库的数据与 一级缓存的数据必须一致。如果一级缓存修改了,在执行commit提交时,将自动刷新一级缓存,执行update语句,将一级缓存的数据更新到数据库。 1.1.1 refresh 刷新 refresh 保证 一级缓存的数据 与 数据库的数据 保持一致。将执行select语句查询数据库,将一级缓存中的数据覆盖掉。

bruobuqi的博客 629

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

缓存的概述 什么是缓存 缓存:是一种优化的方式,将数据存到数据库中,使用的时候直接从缓存中获取,不用通过存储源(数据库、磁盘上的源文件)。 hibernate的缓存 hibernate缓存中提供了优化手段:缓存和抓取策略。hibernate中提供了二种缓存机制:一级缓存、二级缓存。 hibernate的一级缓存 概述:称为是Session级别的缓存,一级缓存生命周期与Session一致(一级缓存...

围巢 190

hibernate 一级缓存、一级缓存快照区、二级缓存

一级缓存:Session级别的缓存.一级缓存与session的生命周期一致.自带的.不可卸载. 二级缓存:SessionFactory级别的缓存.不是自带的.需要手动开启。 向一级缓存存入数据的时候,放入一级缓存区和一级缓存快照区,当更新了一级缓存的数据的时候,事务一旦提交,比对一级缓存和快照区,如果数据一致,不更新,如果数据不一致,自动更新数据库. Hibernate管理一级缓存:1、clear(

Eaphy's Blog 1674

hibernate二级缓存(一)一级缓存与二级缓存

hibernate二级缓存(一)一级缓存与二级缓存 1.hibernate一级缓存 hibernate的一级缓存是session级别的缓存,一级缓存hibernate默认启用且不能被卸载,一个事务内有效。 特点: 使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率;(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据,如果有数据就不查询数据库...

lan墨的博客 2919

Hibernate 一级缓存测试分析

Hibernate的一级缓存就是指Session缓存,此Session非http的session会话技术,可以理解为JDBC的Connection,连接会话,Session缓存就是一块内存空间,用来存放相互管理的java对象,在使用Hibernate查询对象的时候,首先使用对象的OID(Object ID)在Hibernate的一级缓存空间进行查找,如果通过OID匹配到了对象,就直接从一级缓存中取...

小猪奋斗 264

SSH系列:Hibernate中的一级缓存和快照

      一级缓存session:线程级别。 二级缓存:进程级别       快照:       1、快照是数据的副本        2、快照属于一级缓存        3、快照是在堆内存中的        4、快照的作用:保证数据一致性        5、快照的理解:当执行session.getTransaction().commit()时,       Hibernate同时会清理sessi...

weixin_37891342的博客 326

Hibernate学习之Hibernate的一级缓存

hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式。hibernate的缓存分为一级缓存和二级缓存,这两级缓存都位于持久化层(持久化类即实体类),存储的都是数据库数据的备份。

dawn_1108的博客 310

Hibernate的一级缓存

—hibernate中的一级缓存&快照 简单验证一级缓存的存在 User user1= session.get(User.class,1); System.out.println(user1); User user2 = session.get(User.class,1); System.out.println(user2); System...

Adair81的博客 324

Hibernate中的一级缓存机制

Hibernate中的一级缓存 1、什么是缓存? 缓存是一种优化的方式,将数据存入内存中,使用的时候直接从缓存中获取,不用通过存储源。 2、Hibernate框架中提供了很多优化手段:缓存、抓取策略。 Hibernate中提供了2种缓存机制:一级缓存、二级缓存。 一级缓存是Session级别的,自带的。 二级缓存是SessionFactory级别的,需要手动去配置。 3、什么是Hibernate的一级缓存? Hibernate的一级缓存就是指Session缓存,Session缓存是一块内存空间,用来存放

pipizhen_的博客 457

hibernate笔记--hibernate的一级缓存

缓存的概述 什么是缓存 缓存:是一种优化的方式,将数据存到数据库中,使用的时候直接从缓存中获取,不用通过存储源(数据库、磁盘上的源文件)。 hibernate的缓存 hibernate缓存中提供了优化手段:缓存和抓取策略。hibernate中提供了二种缓存机制:一级缓存、二级缓存。 hibernate的一级缓存 概述:称为是Session级别的缓存...

lby0608的博客 288
上一篇: Hibernate学习之路(4) Hibernate实现CRUD
下一篇: Hibernate学习之路(6) 将session与线程绑定
QEcode
博客等级 码龄10年 39粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值