hibernate的flush,实体对象的特征

Hibernate的FlushMode 设置成auto之后,当程序进行查询、提交事务或者调用session.flush()的时候,都会使缓存和数据库进行同步,也就是刷新数据库。提交事务或者session.flush()时,刷新数据库;每次进行查询、提交事务、 阅读详情

hibernate的flush

session flush方法主要做两件事:
 * 清理缓存
 * 执行sql

session 在什么情况下执行sql
 * 默认在事务提交时
 * 显示的调用flush
 * 在执行查询前,如 iterator

hibernate 按照save(insert),update,delete顺序提交相关操作,
可以通过flush来改变提交顺序,使hibernate按照我们的意愿执行

 因为user的主键生成采用uuid,所以完成save时,只是将user纳入到session的管理
 不会发出insert语句,但是已经生成id,session中existsInDatabase状态为false;
 session.save(user);
 调用flush,hibernate会清理缓存,执行sql;
 如果数据库的限制级别为未提交读,那么我们可以看到flush的数据
 并且session中existsInDatabase状态未true;
 session.flush();
 
 提交事务
 默认情况下commit操作会先执行那个flush清理缓存,所以不用显示的调用flush
 commit后数据是无法回滚的
 transaction.commit();
 
 如果user的主键生成策略为native,在调用session.save后,将执行insert语句,返回由数据库生成的id,
 纳入了session管理,修改了session中的existsInDatabase状态为true;
 如果数据库隔离级别设置为提交读,则可以看到flush过的数据
 
--------------------------------------------------------

测试实体对象的特征
 junit简介:
  * 编写测试类xxxTest,需要继承TestCase
  * 编写单元测试方法,测试方法必须以test开头,测试方法不能有返回值和参数,如:
   public void testDelete(){}
  * 单元测试代码最好新建一个目录
  
了解hibernate中CRUD操作

了解get和load的区别:
 * get不支持lazy,load支持lazy;
 * 采用get加载数据,如果没有匹配的数据返回null,而load抛出异常

transient状态的特征
 * 在数据库没有与之匹配的数据
 * 没有纳入session管理
 
persistent状态的特征
 * persistent状态的对象在数据库中又与之匹配的数据
 * 纳入了 session 管理
 * 在清理缓存(脏数据检查)时,会和数据库同步
 
detached状态的特征
 * 在数据库中有与之匹配的数据
 * 没有纳入session管理

hibernate的flush机制 对hibernate的flush机制有兴趣可以看看 立即下载

相关推荐

深入理解Hibernate中的flush机制

主要介绍了深入理解Hibernate中的flush机制,本文是对flush机制深入研究得出的一些结论总结,需要的朋友可以参考下

Hibernate flush详解

说明: 当执行session.flush方法的时候,hibernate内部会检查所有的持久化对象 会判断该对象和数据库有没有对应的数据(根据标示符id),如果没有 则发出insert语句,如果有,则再让该对象和副本进行对比,如果和副本一样,则 什么都不做,如果不一样,则发出update语句 session.fl

路漫漫其修远兮,吾将上下而求索 2212

避坑指南:中国地面气候日值数据集(V3.0)处理中的常见错误与解决方案

本文详细解析了中国地面气候日值数据集(V3.0)处理中的常见错误与解决方案,包括数据清洗、特征值解码、时间序列处理和质量控制等关键步骤。通过Python实战代码示例,帮助研究者高效处理这一包含全国699个气象站多要素日值数据的数据集,避免常见陷阱,提升气候变化研究和农业气象分析的准确性。

xray4的博客 1025

Hibernate的flush机制深入

Hibernate flush 机制:(执行save,update操作时,只是登记行为,flush时真正执行将登记行为插入数据库根据insert,update,……,delete的顺序提交所有登记的操作) //异常:unsafe use of the session Transaction tran = s.beginTransaction(); (1) s.save(cat); (2)(此

paul_wei2008的专栏 3191

PSI5协议技术文档与驱动开发指南

• 供电与数据复用:ECU通过双绞线为传感器提供稳压(典型值5V-11V),同时检测线路电流变化实现数据传输。• 同步信号:ECU发送3.5V电压脉冲(上升沿触发传感器响应),用于时序同步。• 安全气囊:PSI5-P模式实现多碰撞传感器同步采样(响应时间<10ms)• CRC-3(3位):ASIL-B以上功能安全要求(如动力总成传感器)• 奇偶校验(1位):适用于低安全等级场景(如PSI5-P10P模式)• 典型应用:PSI5-P(并行总线)、PSI5-U(通用总线)

u012733413的博客 2865

C++控制台实现简单的注册登录

C++控制台实现简单的注册登录 #include<iostream> #include<string> #include <vector> #include <conio.h> void Display();//调用display显示switch()界面 void Register();//注册 void Enter();//登录 using nam...

乔路非 2万+

hibernate的flush

1.若是hibernate的hbm.xml配置的, 则在一个Transaction tx=session.beginTransaction();里面, session.save(对象)时候,只是会产生select hibernate_sequence.nextval from dual,这样并没有产生insert语句, 在后面加了session.flush(),才产生insert语句,但是此

peng_daoyuan1987的专栏 583

ST MCSDK V6.2.0实战:手把手教你配置HSO-ST观测器,体验500ms收敛的电机无感控制

本文详细介绍了ST MCSDK V6.2.0中HSO-ST观测器的配置方法,实现500ms内电流收敛的无感电机控制。从环境搭建、核心参数解析到无感启动优化,提供实战技巧和性能调优策略,帮助开发者快速掌握高效电机控制技术。

weixin_28720767的博客 578

Hibernate三种实体状态(五)

感谢Jie’ blog http://ilog.vip/ ,谢谢他让我有了继续写下去的信念。愿一起坚持,在路上… 上一章简单介绍了Hibernate简单注解开发和事务处理(四),如果没有看过,请观看上一章 一.Hibernate 的三种实体状态 Hibernate有三种实体状态,有瞬时态(transiant),持久态(persistent),游离态(detached)。 简单理解就是,瞬时态指的是...

两个蝴蝶飞 6017

详解各类以太网标准10BASE-T/100BASE-T4/100BASE-FX/1000BASE-X等

以太网是现实世界中最普遍的一种计算机网络。以太网有两类:第一类是经典以太网,第二类是交换式以太网,使用了一种称为交换机的设备连接不同的计算机。经典以太网是以太网的原始形式,运行速度从3-10 Mbps不等;而交换式以太网正是广泛应用的以太网,可运行在100Mbps、1000Mbps和10000Mbps高速率,分别以快速以太网、千兆以太网和万兆以太网的形式呈现

不积跬步,无以至千里! 5万+

轮式并联五连杆下肢机器人运动控制:从建模到强化学习仿真训练

本文提出了一种基于强化学习的轮式并联五连杆下肢机器人运动控制方法。首先建立了机器人的运动学和动力学模型,推导了正逆解公式,并构建了URDF模型。随后在PyBullet仿真环境中搭建了包含复杂地形的训练场景,设计了基于PPO算法的端到端控制策略,包含状态空间、动作空间和奖励函数的详细设计。通过多组仿真实验验证了该方法在台阶攀爬等任务中的有效性,为轮腿机器人运动控制提供了完整的可复现技术方案。

huanghm88的专栏 347

Hibernate 深度剖析:实体生命周期、游离态本质与生产实战避坑指南

Hibernate实体生命周期与游离态深度解析 本文深入剖析Hibernate实体对象的四种状态(瞬时态、持久态、游离态、删除态),重点解析最容易引起问题的游离态(Detached)特性。通过状态转换图和具体代码示例,揭示Hibernate底层脏检查机制和Session管理原理。特别针对生产环境中常见的游离态操作陷阱(如误用update/merge方法导致数据丢失)进行详细分析,提供正确的重新关联策略。文章还结合Web应用跨请求操作和缓存场景,说明游离态的典型应用场景及最佳实践,帮助开发者避免常见ORM使用

m0_38095869的博客 321

Linux存储软件栈剖析之第5篇:F2FS文件系统

F2FS是三星专为NAND闪存设计的开源文件系统,通过异地更新、磨损均衡等机制优化闪存特性。其架构采用层次化存储管理(Block→Segment→Section→Zone)和多日志区域设计,基于数据热度分类(热/温/冷数据)提升性能。核心创新包括节点地址表(NAT)解决级联更新问题,以及基于成本的垃圾回收算法。F2FS通过检查点机制确保崩溃一致性,并利用并行访问能力充分发挥闪存性能优势,显著降低写放大效应,延长设备寿命。

指尖动听知识库 197

Hibernate对象状态及方法详解

hibernate对象状态图hibernate对象的三种状态及特征1.三种状态:瞬时 (Transient )/临时状态/自由状态 持久 (Persistent) 脱管 (Detached)/游离状态2.特征: 瞬时对象特征:  (1)不处于 Session 的缓存中,也可以说,不被任何一个 Session 实例关联。  (2)在数据库中没有对应的记录。持久化对象特征:  (1)持久化对象总

发呆的程序猿 932

19、英国模式:银行体系的演变与现代金融架构

本文深入探讨了英国银行体系从专业化向全能银行的演变过程,分析了自律监管模式的优劣,并解析了围栏制度对金融稳定的影响。同时,文章还介绍了信用合作社、建筑协会和投资银行的角色与转型,全面展示了英国金融体系的多样性与复杂性,以及其在全球金融市场中的重要作用。

embedding5hiker的博客 104

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

在Hibernate应用中Java对象的状态

应用程序通过new语句创建一个JAVA对象时,JVM会为这个对象分配一块内存空间,只要这个对象被引用,它就一直存在内存中。如果不被引用了,就结束生命周期,会在适当时候被回收。一、理解Session缓存Session的save()方法持久化一个对象,这个对象将被加入到Session缓存中,以后即使不再引用这个对象,但是只要Session缓存没有被清空,这个对象仍然会处于生命周期中。 

急死我了 988

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

hibernate性能优化学习笔记

hibernate 性能缓存 缓存就是数据库数据在内存中的临时容器; 位于数据库和数据库访问层中间 ORm查询数据时会首先根据自身的缓存管理策略,在缓存中查找相关数据,如发现所需要数据,则直接将此数据作为结果加以利用。 避免数据库调用性能的开销 相对内存操作而言,数据库调用是一个代价高昂的过程。 当Session的save()方法持久化一个Customer对象时,对象被加入到session的缓存,即

dartagnan_wang的博客 384

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Hibernate简答题

简单题目 1.持久化对象的三种状态,代表含义。 自由状态(transient): 不曾进行持久化,未与任何Session相关联 持久化状态(persistent): 仅与一个Session相关联 游离状态(detached): 已经进行过持久化,但当前未与任何Session相关联 (1)临时状态 使用new操作符初始化的对象不是立刻就持久化的。他们的状态是瞬时的,也就是说他们没...

灵思哑舍 240

Hibernate 缓存详解

Hibernate 缓存详解 session 一级缓存 1、session 一级缓存所持有的方法特征如下图: 详解: flush:Session 按照缓存中对象的属性变化来同步更新数据库 默认情况下 Session 在以下时间点刷新缓存: 显式调用 Session 的 flush() 方法 当应用程序调用 Transaction 的 commit()方法的时, 该方法先 flus

小程序 1万+

Hibernate与MyBatis性能对比与选型指南

对象关系映射(ORM)是Java企业开发中的核心技术,Hibernate和MyBatis作为主流持久层框架各有特点。Hibernate通过全自动映射提升开发效率,而MyBatis则提供更精准的SQL控制能力。在性能表现上,基准测试显示MyBatis在简单查询和批量操作上具有优势,而Hibernate的变更跟踪机制在更新操作中更高效。对于高并发场景,MyBatis的内存管理更为线性可控;而在复杂领域模型中,Hibernate的快速开发特性价值显著。实际选型需结合项目特征,如电商系统可混合使用两者,关键查询用M

Eric.Net的专栏 482

hibernate要点

转自飞茂的blog1.两种配置文件:   A.hibernate.cfg.xml   和   B.hibernate.properties   A中可含映射文件的配置,而B中hard codes加映射文件。  A。Configuration config=new Configuration().config();   B. Configuration config=new Configuratio

ewolf的工作专栏 1413

Hibernate要点

1.两种配置文件:    A.hibernate.cfg.xml   和   B.hibernate.properties    A中可含映射文件的配置,而B中hard codes加映射文件。   A。Configuration config=new Configuration().config();    B. Configuration config=new Configuration(); 

soleghost的专栏 1485

Hibernate------测试

测试实体对象的生命周期 junit简介: * 编写测试类xxxTest,需要继承TestCase * 编写单元测试方法,测试方法必须以test开头,测试方法不能含有参数和返回值,如:  public void testHello1() {} * 最好单元测试的代码单独建立一个目录 了解Hibernate中CRUD操作 了解get和load的区别? * get不支

funneies的专栏 387

hibernate hql

hibernate get和load的区别get不支持lazy,load支持lazy采用get加载数据,如果没有匹配的数据,返回null,而load则抛出异常 hibernate中三种状态特征 transient 在数据库中没有与之匹配的数据,没有纳入session的管理 persistent persistent状态的对象在数据库中有与之匹配的数据,纳入了session的管理,在清理缓...

iteye_10403的博客 240

Hibernate中get()与load()的核心差异与实战避坑指南

在Java持久层开发中,Hibernate的get()和load()方法常被误认为仅是‘立即加载’与‘延迟加载’的区别,实则二者遵循完全不同的契约语义:get()承诺强一致性,ID不存在时返回null;load()采用弱一致性,返回代理对象并在首次访问非ID字段时才查库,失败即抛ObjectNotFoundException。这种语义差异深刻影响缓存行为、事务边界、序列化安全及性能表现。尤其在Spring MVC响应、批量处理、关联设置等典型场景中,错误选择将引发LazyInitializationExce

diyu8056的博客 433

Hibernate 对象三种状态 瞬时态,持久态,脱管态 以及 save update saveOrUpdate merge等的使用

Hibernate的对象有3种状态,分别为:瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。     *  瞬时态     由new命令开辟内存空间的java对象,     eg. Person person =

Where_the_way的专栏 979
上一篇: hibernate lazy策略
下一篇: 行动的力量
欧德曼
博客等级 码龄19年 63粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值