【Hibernate开发】对持久化对象和缓存机制的理解

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

一.首先来理清几个有关对象持久化的概念:

“暂时”数据,比如在电脑内存中的数据就是暂时数据,当电脑关机后,数据就消失了;“持久”数据,就像电脑硬盘上的数据,即使关机了,它还是存在。持久化的概念就是将数据从"临时"状态转换为"持久"状态,最常用的方式是使用文件来存储持久化数据。

“对象持久化”和“数据持久化”:数据持久化是对象持久化的基础,对象持久化的主要操作对象是对象里面的数据,也就是属性,当然如果属性是对象,一样要进行和母对象一样的持久化过程。现在一般将对象持久化到关系数据库中,对象之间的联系可以通过单一主键、联合主键、外键等方式得以体现。对象和关系是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据,数据库中的关系数据无法直接表达多对多关联和继承,所以需要对象-关系(ORM)系统来实现程序对象到关系数据库数据的映射,完成此种功能的软件层一般就称为持久化层。

【Hibernate开发】对持久化对象和缓存机制的理解

如上面结构所示,Hibernate体系结构就是来完成数据持久化与反持久化的功能的,连接数据可和应用程序,把应用程序中的对象和对象之间的关系持久化到数据库中以二维关系表示,反之一样。Hibernat是通过配置文件和映射文件来为应用层和数据库层提供持久化服务的。

二.下面是是Hibernate中对象持久化的具体内容和方式

1.持久化类:用来实现业务问题实体的类就是持久化类,他需要满足这些规则:

* 实现一个默认的(无参)构造方法

* 提供一个标识属性

* 使用非final类型的类

* 为持久化字段声明访问方法和是否可变的标志

2.Hibernate对象状态

【Hibernate开发】对持久化对象和缓存机制的理解

Hibernate对象具有三种状态:瞬时状态、持久化状态、游离状态,三者的关系如上图所示。瞬时变量就是刚刚new出来后还没有与任何session相关联的状态;持久变量就是刚被sava()或load()的对象,它还在session的范围内,session没有关闭,这是该对象和数据库中的记录保持一致,只要session关闭,就会把内存中的对象的最信息更新到数据库中对应的记录里;游离状态就是就是对象曾经被session持久化过,现在对应的session已经关闭了,但是这样的变量还能被新得到的session持久化,他的特点就是带有持久化标识符。

三.Session方法简介

Session中方法可以改变对象的状态,这个可以参考上图,里面的方法一定要理解。

* save():是瞬时变量持久化

* load()和get():根据某个对象的持久化标识符来获取该对象。每个方法中有两个参数,指明要加载对象的class属性和持久化标志符。load()会报空异常,get()直接返回null。

* update():使托管对象持久化。持久化对象的更新与同步不需人工操作,session的刷新机制就可以完成。

* saveOrUpdate():既能保存瞬时对象又可更新/重新关联托管对象。对象状态为瞬时就执行save()方法,为脱管状态就执行update()方法。

* delete():从数据库中一出与对象相对应的记录。删除持久对象和脱管对象(先与session关联),变为瞬时变量。

* evict():从缓存中删除一个持久变量,,使他变为脱管状态。

* close():关闭session,缓存中的所有持久对象变为脱管对象。

四.Hibernate缓存机制

这里可以参考百度百科Hibernate缓存机制

Hibernate采用两级缓存机制,第一层是Session级的缓存,第二级是SessionFactory级别的缓存。

Session级缓存:为内置缓存,无法卸载,他是一些集合属性包含的数据,是保存应用程序所需要的一些配置、对象等信息,是应用程序级的缓存。

SessionFactory缓存:Hibernate的第二级缓存,包括内置缓存和外置缓存。内置缓存和session级缓存在实现刚发上很相似。内置缓存是只读的,应用程序不能修改,不需要进行内置缓存与映射文件的同步,他保存的是Hibernate底层需要的一些配置、映射、SQL语句等信息都是公共级的;外置缓存是一个可配置的插件,它存储的数据是数据库数据的拷贝,外置缓存的介质可以是内存或硬盘。

五.最后我加一点,这一点长期被面试官问到:Hibernate和JDBC的异同?

JDBC与Hibernate在性能上相比,JDBC灵活性有优势。而Hibernate在易学性,易用性上有些优势。当用到很多复杂的多表联查和复杂的数据库操作时,JDBC有优势。可见hibernate与jdbc的优缺点

相同点:1两者都是java的数据库操作中的中间件

2.两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。

3.两者都可以对数据库的更新操作进行显示的事务处理。

不同点:1.使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate使用的是HQL语言。

2.操作的对象不同:JDBC操作的是数据将数据通过SQL语句直接传送到数据库中执行,Hibernate操作的是持久化数据,由Hibernate底层将持久化对象中的数据更新到数据库中。

3.数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一致,而Hibernate操作的数据是可持久化的,即持久化对象的数据属性的值是可以跟数据库中的值保持一致的。

Java 开发Hibernate 的关联对象缓存 在 Java 开发中,Hibernate 作为一个优秀的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,频繁的数据库交互会导致性能瓶颈,尤其是涉及关联对象的查询。Hibernate 的关联对象缓存机制可以有效减少数据库查询次数,提高应用程序的性能。本文的目的在于深入探讨 Hibernate 关联对象缓存的原理、使用方法最佳实践,范围涵盖从基本概念到实际项目应用的各个方面。本文将按照以下结构进行阐述:首先介绍核心概念与联系,让读者对 Hibernate 关联对象缓存有一个直观的认识; 阅读详情

相关推荐

NCCL分布式训练中ibv_reg_mr_iova2内存分配失败的3种解决方案(附详细排查流程)

本文深入探讨了NCCL分布式训练中ibv_reg_mr_iova2内存分配失败的3种解决方案,包括快速临时修复、标准系统配置PAM模块根治方案。详细分析了错误原因,提供了完整的排查流程性能优化建议,帮助开发者高效解决RDMA网络环境下的内存锁定问题。

nut55的博客 607

二:hibernate持久化对象标识符

hibernate持久化对象标识符 1.1持久化类的编写规范 1.1.1什么是持久化类: Hibernate是持久层的ORM映射框架,专注于数据的持久化工作。所谓的持久化,就是将内存中的数据永久存储到关系型数据库中。那么知道了什么是持久化,什么又是持久化类呢?其实所谓的持久化类指的是一个Java类与数据库表建立了映射关系,那么这个类称为是持久化类。其实你可以简单的理解持久化类就是一

u014163689的博客 2047

从Xilinx FPGA到MIPI DSI LCD屏:手撸代码的实战经验分享

本文分享了使用Xilinx FPGA驱动MIPI DSI LCD屏的实战经验。作者从依赖官方IP核失败,到与底层D-PHY IP缠斗,最终通过手撸代码,直接配置GTY收发器原语并实现完整的D-PHY与DSI协议栈,成功点亮屏幕。文章详细剖析了协议细节、Vivado工具链的调试技巧与避坑指南,为FPGA工程师提供了从理论到实践的宝贵参考。

weixin_29188997的博客 372

缓存持久化

4)Elasticsearch用来处理用户针对请求日志的查询请求,它将查询关键字段的值请求ID存放到索引中,跟进查询关键字获得结果ID的列表,再通过结果ID去HBase中获取详细的请求数据。可以把Kafka的存储架构简单理解为,Kafka写数据时通过追加数据到文件末尾来实现顺序写,读取数据时直接从文件中读,这样做的好处是读操作不会阻塞写操作,这也是其吞吐量大的原因。总体来说,对于浏览页面的用户行为,需要把用户请求尽量拦截在CDN、静态资源或负载均衡侧,如果确实做不到,也要拦截在缓存中。

chenglin016的博客 1601

redis的持久化缓存机制

说道redis,我们可能都会知道了他是一个类似缓存的一个内存数据库,我们从未感知到它的存在是因为他很快,为什么非常快,是因为他的发展到应用很快,还有他的反应速度也是非常快的。         上一篇文章我们讲到了缓存以及非关系型数据库的由来,这篇我们来讲讲redis这种非关系型数据库用在什么地方,以及他的特色——持久化是怎么实现的。 一、redis的适用环境

Big Smile 3万+

关于对象持久化(序列化)

import java.io.Serializable; public class OrderBean implements Serializable{ private static final long serialVersionUID = 1L; private String orderId; private String orderName; private String

chuyouyinghe的专栏 932

Hibernate入门学习【三】

持久化 将内存中的数据存入数据库中,Hibernate是进行持久化的框架。 持久化类 使得java对象与数据库的表建立映射关系。这个类在Hibernate里面可被称作持久化持久化类编写规则 包含无参的构造函数: Hibernate底层需要使用反射生成实例 属性私有,但是相应的get/set方法共有:Hibernate需要获取值 提供与数据库内表的主键相对应的唯一标识OID: Java中...

qq_43428687的博客 190

Hibernate基础课程总结

1.  JDBC的优点缺点JDBC的优点            直接底层操作,提供了很简单、便捷的访问数据库的方法,跨平台性比较强。灵活性比较强,可以写很复杂的SQL语句。JDBC的缺点            因为JAVA是面向对象的,JDBC没有做到使数据能够面向对象的编程,使程序员的思考仍停留在SQL语句上。            操作比较繁琐,很多代码需要重复写很多次。          ...

小喵的博客 600

持久化对象三种状态以及session的Get()与Load()区别

一、Hibernate持久化对象三种状态 在Hibernate持久化类的对象可以划分为三种状态,分别是瞬态,持久态,脱管态。 1. 瞬态(Transient),也叫临时态。处于这种状态的对象具备的特征如下:                a) 不在Session的缓存中,不与任何的Session实例相关联。                b) 在数据库中没有与

vincent 955

SSH框架之Hibernate第二篇

1.1 持久化类的编写规则 1.1.1 什么是持久化类? 持久化类 : 与表建立了映射关系的实体类,就可以称之为持久化类. 持久化类 = Java类 + 映射文件. 1.1.2 持久化类的编写规则 (1): 提供无参数的构造方法 (2): 类中的成员都是私有的private (3): 对私有属性提供get/set方法 ...

whyrookie的博客 145

java高级工程师--------hibernate的知识重点

hibernate的作用 1)hibernate是基于ORM框架的,通过映射将对数据库的操作改成对pojo类得操作,从而实现了面向对象的对数据库进行操作。 2)hibernate在JDBC的基础上进行封装,对数据库的操作是全自动化的,大部分功能不用再编写sql语句 3)hibernate有一级缓存二级缓存来提高执行的效率 4)与spring整合之后,统一由spring配置管理事物,简化了

cenfei78325747的专栏 1283

关于hibernate的一些操作

import java.math.BigInteger; import java.util.Iterator; import java.util.List; import java.util.Set; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.SQLQuery;

464

Hibernate对象的三种状态以及缓存机制

Hibernate对象的三种状态 1.瞬时态 没有id并且没有关联session,在Hibernate中要求所有实体对象必须要有与数据表主键相对应的属性,即id,当对象刚创建出来的时候没有id且没有与session相关联,这个时候的对象为瞬时态 2.持久化状态 当实体对象的id被赋值,并且与session关联后,此时的对象持久化对象,处于这种状态的对象所有的改变将会被记录到数据库中,在开发中我们...

qq_42469834的博客 300

Hibernate缓存简介及领域对象的三种状态

1. Session级别的缓存又叫做一级缓存;SessionFactory级别的缓存叫做二级缓存。 2.理解Session的缓存: •当Session的save()方法持久化一个Customer对象时,Customer对象被加入到Session的缓存中,以后即使应用程序中的引用变量不再引用Customer对象,只要Session的缓存还没有被清空,Customer对象仍然处于生命周期中

jialinqiang的专栏 3078

hibernate mysql缓存机制_理解hibernate缓存

简单理解Hibernate三种状态的概念及互相转化在Hibernate中有三种状态,对它的深入理解,才能更好的理解hibernate的运行机理,刚开始不太注意这些概念,后来发现它是重要的。对于理解hibernate,JVMsql的关系有更好的理解。对于需要持久化的JAVA对象,在它的生命周期中有三种状态,而且互相转化。Hibernate三种状...文章文艺小青年2017-08-11800浏览量h...

weixin_33218578的博客 330

Hibernate的脏数据检查机制:Session缓存持久化上下文的生命周期

在数据库操作中,"脏数据"指的是那些已经被修改但尚未同步到数据库的数据。在 Hibernate 中,脏数据检查机制负责识别哪些持久化对象(Persistent Objects)的状态已经发生改变,需要在事务提交时同步到数据库。Hibernate 会将从数据库加载的对象的状态与当前对象的状态进行比较,如果检测到差异,就认为该对象是“脏的”,需要执行相应的 SQL 更新操作。

weixin_41455464的博客 763

理解Hibernate的Session缓存机制

Hibernate的session缓存机制

一个真实、有温度的无名小卒 951

Hibernate进阶篇——缓存对象状态

Hibernate快速入门指南 目录: Hibernate简介 Hibernate核心接口 Hibernate与Mybatis对比 Hibernate一级缓存与二级缓存 Hibernate持久化对象状态 Hibernate是什么?主要有三点: 1.它是开源轻量级的 2.它是JavaEE三层架构中的持久层框架 (所谓持久层框架:简单点说,就是负责数据持久化的框架,例如原始的...

IT修真院:初学者转行到互联网的聚集地 520

如何理解Hibernate持久化

学习Hibernate,必须要理解什么是持久化?结合了一下网上的各位大佬的观点自己的理解持久化概念 持久化是将程序数据在持久状态瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存)。 而Hibernate是对JDBC的轻量级封装,其持久化就是一个把数据存储到数据库的过程,也就是说,可以将Hiberna...

浮生 2419

Hibernate缓存机制(重要)

1.说下Hibernate缓存机制(重要) 一级缓存,二级缓存 Session 的缓存被称为hibernate的第一级缓存。SessionFactory的外置缓存称为hibernate 的二级缓存。这两个缓存都位于持久层,它们存放的都是数据库数据的拷贝。SessionFactory的内置缓存存放元数据预定义SQL,SessionFactory的内置缓存是只读缓存Hibernate缓存包括...

weixin_42595331的博客 747
上一篇: UDP/TCP 打洞(穿越NAT)技术
下一篇: com.opensymphony.module.sitemesh.filter.pagefilter作用?
zi_jun
博客等级 码龄18年 109粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值