【Java】Hibernate核心方法总结

Hibernate核心方法总结 临时对象变持久对象给对象分配id,这个id叫oid, 它和数据库的记录id对应一致执行save方法时会发起一条insert语句, 但要等到事务提交时才会作用到数据库save方法前设置id无效, save方法后设置id报异常,持久对象的id不准修改1.删除对象2.删除持久对象3.删除数据库里对应的记录4.当删除的对象数据库里没有对应的id值的记录是抛出异常。 阅读详情

Session中的核心方法梳理

① save方法

这个方法表示将一个对象保存到数据库中,可以将一个不含OID的new出来的临时对象转换为一个处于Session缓存中具有OID的持久化对象。

需要注意的是:在save方法前设置OID是无效的但是也不会报错,在save方法之后设置OID程序会抛出异常,因为持久化之后的对象的OID是不可更改的,因为对象的OID此时和数据库中的一条记录对应。

结论总结

1.临时对象变持久对象

2.给对象分配id,这个id叫oid, 它和数据库的记录id对应一致

3.执行save方法时会发起一条insert语句, 但要等到事务提交时才会作用到数据库

4.save方法前设置id无效, save方法后设置id报异常,持久对象的id不准修改

② persist方法

这个方法基本个save方法差不多,唯一的区别是,在这个方法之前也不可以设置对象的OID,否则不会执行插入操作,而是会抛出异常。

③ get/load方法

get这个方法是从数据库中获取一条数据记录转成对象放到Session缓存中,load方法也是这个功能。二者有着明显的区别先看代码:

结论1

get方法会立即加载对象发起sql语句, load方法后面如果没有使用到加载的对象,不会立即加载对象发起sql语句,返回一个代理对象,当使用到该对象的时候才会通过代理对象加载真正需要对象并发起sql语句,这种做法我们又叫做延迟加载或懒加载!

结论2

如果查询的数据在数据库中没有对应的id的记录值, get方法返回null, 不报异常, load方法,它不会立即加载对象发起sql, 直接返回一个代理对象, 当使用加载对象的时候, 代理对象才加载真正的对象并发起sql,这时才发现查不到对象,所以就只能报出异常了!

结论3:

load方法可能会抛出懒加载异常! 什么时候回抛出这个异常呢? 执行了laod方法, 返回了代理对象了, 往后还没有执行到使用这个预加载的对象的时候,session(数据库连接会话)关闭了, 后面再执行到使用加载对象, 代理对象才想起去加载真正的对象发起sql执行查询,啊!才发现数据库连接断掉了, 就包懒加载异常!

④update方法

a.这个方法顾名思义就是更新一个对象在数据库中的对照情况,从而使一个游离对象转换为一个持久化对象。

 b. 若是更新一个持久化对象,不需要再显式子的进行update方法,因为在commit方法中已经进行过flush了,它会自动发起update语句。

c.若是关闭了一个session,而又打开了一个session,这时,前一个session对象相对于第二个session来说就是游离的对象了,此时,做更新的时候, 必须显式的用第二个session进行update一下才可以将这个对象变成相对于第二个session的持久化对象。才会发起sql语句.

e.若表中没有与Java对象对应的记录,则会抛出异常

f.在update语句之前在用get方法,获取同一个id的数据记录, update会同时将两个相同id的对象往session缓存里放,那么会抛出异常,注意:同一个session中不可以存在两个相同OID的对象。

  ⑤ saveOrUpdate方法

  这个方法同时包含了前边save和update的功能。当对象时临时的,那么执行save方法,当对象时游离的,那么执行update方法。

 ⑥ delete方法

 顾名思义,这个方法就是来删除游离的或者持久化的对象及其在数据库中对应的记录。

总结

1.删除对象

2.删除持久对象

3.删除数据库里对应的记录

4.当删除的对象数据库里没有对应的id值的记录是抛出异常

5.默认的删除的时候,会把缓存从对象和数据库中记录删除,但这个对象会保留id, 妨碍后面重复利用这个对象, 这个问题通过配置来处理,作用删除操作后把对象的id设置null

true

Hibernate 的 cfg.xml 配置文件中有一个 hibernate.use_identifier_rollback 属性,其默认值为 false,若把它设为 true,将改变 delete() 方法的运行行为:delete() 方法会把持久化对象或游离对象的 OID 设置为 null,使它们变为临时对象。这样程序就可以重复利用这些对象了

⑦ evict方法

  这个方法就是将持久化对象从session缓存中删除,使其成为一个游离的对象。

⑧doWork方法, jdbc

存储过程, 批量操作, jdbc原生conn

这个方法是在hibernate中拿到jdbc的原生的connection

深入理解Hibernate:Java持久层框架的全面指南 Hibernate是一个强大的ORM(对象关系映射)框架,它通过将Java对象与数据库表进行映射,简化了数据库操作。无论是简单的CRUD操作,还是复杂的事务管理,Hibernate都提供了强大的支持。本文将深入探讨Hibernate的核心概念、配置、映射、查询、缓存以及高级特性,帮助你全面掌握Hibernate的使用方法。 阅读详情

相关推荐

Java必知必会系列:ORM框架与Hibernate

作者:禅与计算机程序设计艺术 1.背景介绍 在Java开发中,ORM(Object-Relational Mapping)是一种数据库编程的模式,它将对象关系映射到关系型数据库中的表格结构上。它的优点是方便了程序员对数据库的访问、数据持久化、安全性管理等方面的工作。Hibernate是当前流行的开源

AI天才研究院 181

hibetnateTemplate常用方法

1、delete(Object entity) 删除指定的持久化实例 在程序中一般先用 Assert.notNull和 Assert.isTrue断言entity是否为空 和 entity的id是否大于0若 否则事务回滚。再用get(Class entityClass,Serializable id,LockMode lockMode)加锁查询出持久 化实例,一般用lockMode.upda

a243932069的专栏 895

Java入门实战:Hibernate与MyBatis使用

1.背景介绍 Hibernate(开放源代码JPA实现)、MyBatis(apache软件基金会开源的ORM框架)都是目前最流行的Java框架。无论是开发企业级应用还是Web应用,都需要用到它们中的一种或多种。 Hibernate是一个全自动的Java持久化框架,它提供了一套完整的生命周期管理策略,从数据库到Java对象再到数据库。通过

AI天才研究院 340

Hibernate基本使用

qq_45429856的博客 6363

掌握 Java 中 Hibernate 的日志配置与管理

Hibernate 作为 Java 生态中最流行的 ORM 框架之一,其日志系统对于开发调试和性能监控至关重要。理解 Hibernate 日志系统的工作原理掌握主流日志框架与 Hibernate 的集成方法学习如何根据需求调整日志级别优化日志性能并避免常见陷阱在生产环境中有效管理 Hibernate 日志本文覆盖 Hibernate 5.x 和 6.x 版本的日志配置,适用于大多数 Java 应用场景。背景介绍:概述日志系统的重要性及 Hibernate 日志特点。

Java大师兄的博客 1192

实测对比:DeepSeek、豆包、千问三大AI模型生成测试用例谁更强?(附完整代码)

本文通过实测对比了DeepSeek、豆包、千问三大AI模型在生成测试用例方面的表现。文章提供了完整的Python代码实现,详细分析了各模型在用例完整性、准确性、边界覆盖及幻觉控制等维度的差异,并分享了工程化集成与多模型融合等优化策略,旨在帮助测试团队选择合适工具以提升工作效率。

ik6789012的博客 958

菜鸟学SSH——Hibernate——Session之save()方法

Session的save()方法用来将一个临时对象转变为持久化对象,也就是将一个新的实体保存到数据库中。通过save()将持久化对象保存到数据库需要经过以下步骤: 1,系统根据指定的ID生成策略,为临时对象生成一个唯一的OID; 2,将临时对象加载到缓存中,使之变成持久化对象; 3,提交事务时,清理缓存,利用持久化对象包含的信息生成insert语句,将持久化对象保存到数据库。 OK,下面来...

纸上得来终觉浅,绝知此事要躬行 3万+

ANSYS MAXWELL内置式永磁同步电机(IPMSM)转矩最大时输入电流相位的确定

1.在转子转速为零时看一个周期内的转矩变化

qq_41752507的博客 6517

java中save方法,如何在java中获取我的模型的save()?

Netbeans非常友好,可以为我创建这门课。但是我想知道如何将数据保存到数据库?我会认为它会像...Content $content = new Content();$content->setName();$content->save();但我没有看到任何保存功能或任何暗示此内容可以保存的内容。我可以编写查询,这样做,但它创建的注释看起来像它已经内置支持。@Entity@Table(...

weixin_36312271的博客 2232

Android无线调试:adb tcpip连接实战指南

本文详细介绍了Android无线调试的完整流程,重点讲解如何使用adb tcpip命令通过Wi-Fi连接设备,摆脱数据线束缚。涵盖环境配置、连接实战、稳定性优化及常见问题排查,帮助开发者高效实现无线adb调试,提升工作效率。

pink的博客 724

内存优化--LOGBACK导致内存告警

一.故事背景 由于开辟新市场需要,开发了新的项部署在海外平台,其中最消耗内存的功能是消费kafka消息(最开始预计一天有1千万的量),部署完之后运行一段时间发现出现内存告警问题。 二.分析问题 出现内存告警,(新项目是低配置机器 2C4G * 2台)第一个念头是去查看堆空间设置的情况,看到jvm启动命令中堆空间都是直接指定大小,说明问题不是出在堆空间 -Xmx3g -Xms3g 先不管这些,去查看总的内存使用情况,发现总的内存空间使用将近有92% = 3.68G,那么这多出来使用的0.6

qq_33199919的博客 6053

【Java】Hibernate的一级缓存Hibernate里的对象不同状态和Session的核心方法

Hibernate对象状态转换测试总结:临时状态对象通过save()转为持久化状态;持久化对象在事务提交时会与session缓存比较,不同则触发update;游离状态对象需用update()转为持久化状态,不能修改ID值;session缓存中不允许存在相同ID的对象。对象状态包括临时态、持久态和游离态,通过save/update/delete方法实现状态转换。

CodeRunning的博客 571

工业级隔离CAN FD收发器ISO1042设计实战:从原理到EMC防护

在工业自动化与伺服驱动系统中,CAN总线是实现设备间可靠通信的关键技术。其核心原理是通过差分信号传输和仲裁机制,在复杂电磁环境中实现多节点实时数据交换。这项技术的核心价值在于为高噪声、高干扰的工业现场提供了稳定、确定性的通信基础,是构建分布式控制系统不可或缺的环节。其典型应用场景包括新能源汽车电池管理、工业机器人伺服控制以及光伏逆变器集群通信等。本文将聚焦于如何通过高性能隔离CAN FD收发器(如TI的ISO1042)来应对地电位差、浪涌和高压串扰等现场挑战,深入解析其集成的电气隔离、±70V总线故障保护和

weixin_26834815的博客 391

Java 常用注解 & 核心方法速查表

Override。

mqwguardain的博客 356

基于Simulink的输入-输出线性化精确转矩控制

本文详细介绍了基于Simulink的永磁同步电机(PMSM)输入-输出线性化(IOL)精确转矩控制方法。针对传统解耦控制在非线性转矩特性下的局限性,通过建立PMSM非线性状态空间模型,设计IOL控制器将系统转化为线性输入-输出映射。文章包含系统原理推导、Simulink建模步骤、参数整定方法和仿真结果分析,验证了IOL在高动态、宽速域工况下的优越性能(转矩误差降低90%)。最后提出了工程实现要点和扩展应用方向,为开发高精度电机驱动系统提供了实用指导。

xiaoheshang_123的博客 304

AUTOSAR模式管理-EcuM多核处理及其他概念

因此,EcuM不请求状态。因此,BswM必须确保,例如,在调用EcuM_GoHalt或EcuM_GoPoll之前,必须将关机目标从其默认值更改为ECUM_STATE_SLEEP。对于ECU的关闭,BswM(位于主EcuM的同一个分区中)最终调用主核上的GoOff,该GoOff将请求分发给所有的从核。在ECU Manager模块的早期版本中,睡眠目标被特殊处理,因为在ECU中实现的睡眠模式取决于ECU的功能。在使用了外部的SBC控制相关的MCU的下电的时候,在OFF阶段最后调用SBC进入到Sleep的指令。

m0_49148264的博客 1342

Hibernate中Session的核心方法一

前边我们讲过了Hibernate中Session的意义和如何使用Session的缓存,即Session是Hibernate提供的操作数据库的最主要的接口,这个Session当中提供了一系列查询、更新、删除、加载Java对象从而操作数据库的方法。Session最显著的特点是Session接口的实现类当中拥有一系列的Java集合,这些Java集合构成了Session缓存。Session缓存的作用是降低

qq792020962的博客 3462

Autosar EcuM配置-初始化及下电执行函数-基于ETAS软件

Autosar EcuM学习笔记-上电初始化执行函数及下电前执行函数,本文介绍在EcuM中的配置及使用。

赞的博客 851

Hibernate:session常用方法

save(Obect obj); update(对象); package com.zgq.util; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Trans...

qq_37447749的博客 322

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

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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

[原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,updat...

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ----------------------------------------------------------...

weixin_30457465的博客 91

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Hibernate框架介绍以及入门 【三】Hibernate核心API

Hibernate核心API 一、Configuration:Hibernate配置对象 Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中, Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration 类在整个Hibernate 项...

程序员猫爪 665

35个Hibernate 注解:Hibernate架构设计与注解应用案例(必须收藏)

Hibernate 是 Java 持久化领域的核心框架,通过对象关系映射(ORM)技术,将 Java 对象与关系型数据库中的表相互映射。这种映射使得开发者能够使用面向对象的方法来处理数据,而不必编写复杂的 SQL 语句。Hibernate 提供了一系列注解,如 `@Entity` 用于标识实体类,`@Table` 用于指定实体与数据库表的映射,`@Id` 用于标记实体的主键字段,以及 `@Column` 用于定义实体属性与数据库表列的映射关系。 此外,`@ManyToOne`、`@OneToMany` 和

肖哥弹架构博客 1252

[ Hibernate ] Hibernate 入门看这篇就够了(1)

带你走进 Hibernate ~1. Hibernate 概述1.1 什么是 Hibernate1.2 Hibernate 的优势1.3 Hibernate 入门2. Hibernate 核心API2.1 Configuration:Hibernate的配置对象2.2 SessionFactory:Session工厂2.3 Session:类似Connection对象是连接对象2.4 Tran...

SolarL的博客 526

SSH框架之Hibernate第一篇

1.2Hibernate的概述: 1.2.1 什么Hibernate? Hibernate(开发源代码的对象关系映射框架)是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系, 是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操作数据库.Hiber...

不一样的花朵的博客 352

一文详解Hibernate

Configration接口。

优快云博客技术,java高级工程师,业务层架构师,高级管理认证,毕业设计可以联系我 1637

Hibernate入门——Hibernate框架的快速入门

hibernate 1.hibernate介绍: Hibernate 是一个开放源代码的对象关系映射框架, 它对 JDBC 进行了较为重量级的对象封装, 它将entity与数据库表建立映射关系, 是一个全自动的 orm 框架, hibernate 可以自动生成 SQL 语句,自动执行, 使得 Java 程序员可以随心所欲的使用面向对象编程思维来操纵数据库, 通过操作对象的方式来操作数据库 极大的提高开发的效率。Hibernate 可以应用在任何使用 JDBC 的场合, 是持久层的一款框架,用来完成数据持久

wuhuqifeilzz的博客 208
上一篇: 【Java】Hibernate的一级缓存Hibernate里的对象不同状态和Session的核心方法
synchronizeOn
博客等级 码龄3年 1193粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值