hibernate初级 hibernate中对象的状态及其相互关系

在java中应用程序通过new创建一个java对象时,jvm会为这个对象分配一块内存空间,只要这个对象被应用,就一直处于内存中,如果这个对象不在被任何引用变量引用,java虚拟机会适当时候回收内存,这就是垃圾回收器,java集合里面存放的对象实际上面就是java对象的引用,当我们向对象里面添加或者删除一个对象的时候实际上是把一个引用添加或删除了,在hibernate中session接口是hibernate提供给应用程序的主要接口,提供了主要的一些数据库操作,session具有缓存,位于缓存中的对象处于持久化状态,它和数据库中的相关记录对应。session缓存两大作用,一,减少访问数据库的频率,二,保证缓存中的对象与数据库中的记录同步。位于缓存中的对象叫做持久化对象,

public static void testObject()
 {
  Session session=HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  Customer customer = new Customer();
  customer.setName("elvia");
  Order order1=new Order();
  order1.setOrdernumber(3);
  Order order2=new Order();
  order2.setOrdernumber(4);
 
  customer.getOrders().add(order1);

  session.getTransaction().commit();
 }

 public static void testObject2()
 {
  Session session=HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  Customer customer = new Customer();
  customer.setName("elvia");
  session.save(customer);//持久化customer对象,同时customer对象被
  //加入到缓存中,上面customer为一持久化对象
  Long id=customer.getId();//获得customer的id
  Customer c2=(Customer)session.load(Customer.class,id);
  //重新loadcustomer对象,直接从缓存中取出,而不是访问数据库
  session.getTransaction().commit();

  session.close();//关闭session,清空缓存
  //但是仍然可以访问c2,此时c2处于游离状态
  System.out.println(c2.getName()); 
 }

位于session缓存中的持久化对象状态发生了变化,session并不会马上执行相关sql语句,

public static void testObject3()
 {
  Session session=HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  Customer customer = (Customer)session.load(Customer.class,new Long(1));
  customer.setName("11");
  customer.setName("22");

  session.getTransaction().commit();
 },

上面所做的操作,只会执行一句sql语句把name改为22,而不会执行两次update,当session加载了customer对象后,会给customer对象的值类型属性复制一份快照,当session清理缓存时,通过比较customer对象的当前属性与快照,session判断那些属性进行了改变,从而执行相应的update

session会在1 comomit方法的时候,commit方法先清理缓存,然后在向数据库提交事务,当应用程序调用find或者iterator的时候如果缓存中的持久化对象发生了改变则先清理缓存,当应用程序调用flush的时候,flush是清理缓存执行一部分sql操作,但是不会提交事务,而commit是先清理缓存再提交事务,

hibernate中java对象的状态

1临时状态,刚由new来创建,还没有被持久化,不处于session缓存中

2  持久化状态,已经被持久化,加入到session缓存中,处于持久化状态的对象,持久化对象

3 游离状态,已经被持久化,当不再处于sesion缓存中。

session的特定方法促使java对象由一个状态转换为另一个状态

session接口的相关方法

save方法把临时对象转换为持久化对象 save完成以下操作,把customer对象加入到缓存中,使他变成持久化对象,选用映射文件中指定的标识符生成器给持久化对象分配唯一OID,如果希望由应用程序来给customer对象指定oid,可以调用save的重载方法save(customer,new Long(155)),savef并不是立即执行sqlinsert的,而是等到清理缓存的时候,注意无论java处于何种状态,多不应该由应用程序来修改它的oid

public static void testObject4()
 {
  Session session=HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  Customer c=new Customer();
  c.setName("1111");
  session.save(c);
  /*
   Customer c2=new Customer();
   session.save(c2);
   c2.seName(""222);
  */
  session.getTransaction().commit();
 }上面两种实现实际上是一个效果,因为只有等到session清理缓存的时候,才执行相应的sql操作

saveOrUpdate方法同时包含save和update方法的功能,如果传人的参数是临时状态则执行save,如果传入的参数是游离对象则执行update方法,如果传入的参数是持久化对象则直接返回,session的load和get方法,区别在于load方法当数据库中不存在Oid的时候抛出异常,get则返回null

delete方法从数据库中删除与java对象对应的记录

对象和对象是相互关联的,再session缓存中存放的是一幅相互关联的对象图,比方说user里面有个属性是company,这样就可以通过user来获得user所在的company的相关信息,同时也可以根据company获得这个company的所有的user的相关信息,<set> <many-to-one> <one-to-one> 多由一个cascade属性,值有none,save-update,delete ,all,delete-orphan,all-delete-orphan

  

SAP_PP模块中MRP中信号灯简介 一、信号灯的作用二、常见的信号灯颜色及含义三、信号灯的来源四、常见场景示例示例1:物料满足所有需求示例2:生产订单已延迟示例3:缺料或未产生计划订单五、相关事务码参考六、如何应对红色或黄色信号灯?七、前台操作说明在 SAP PP 模块中,**MRP(物料需求计划)运行结果中的“信号灯”是一种非常直观的可视化提示工具,用于帮助用户快速识别物料计划是否存在异常或需要关注的问题。这些信号灯通常出现在MD04(库存/需求清单)、MD05(单物料MRP清单)、MD07(MRP列表)**等事务代码的界面中。 阅读详情

相关推荐

PIDNet实战:如何在Cityscapes数据集上实现93.2 FPS的实时语义分割(附完整训练代码)

本文提供了在Cityscapes数据集上实现实时语义分割模型PIDNet的完整工程实践指南。PIDNet凭借其独特的比例-积分-微分三分支架构,在CVPR 2023上取得了速度与精度的出色平衡。文章详细介绍了从环境配置、数据预处理、模型训练到性能优化与部署的全流程,并分享了实现93.2 FPS高推理速度的关键技巧与代码。

weixin_29047919的博客 374

Hibernate学习之对象的状态及其转换

介绍 Hibernate 是完整的对象/关系映射解决方案,它提供了对象状态管理的功能,使开发者不再需要理会底层数据库系统的细节。也就是说,相对于常见的 JDBC/SQL 持久层方案中需要管理 SQL 语句,Hibernate 采用了更自然的面向对象的视角来持久化 Java 应用中的数据。 换句话说,使用 Hibernate 的开发者应该总是关注对象的状态(state),不必考虑 SQL 语句的

一大三千的博客 1393

CST中PEC结构涂覆吸波材料的RCS仿真与优化

本文详细介绍了在CST Studio Suite中对PEC结构涂覆吸波材料进行RCS仿真的完整流程与优化策略。通过精确的材料参数设置、涂层厚度优化和仿真技巧,有效降低目标的雷达散射截面,提升隐身性能。文章结合实战案例,为工程师提供了一套高效的RCS仿真与优化解决方案。

c2d3e4f的博客 692

Hibernate中java对象的状态

在Hibernate中java对象的状态:       1、临时状态(Transient):                  与数据库没有对应,跟Session没有关联                  一般是新new出的对象       2、持久化状态(Persist):                 对象再Session的管理之中,最终会有对应的数据记录

麒麟木木 1626

每天10分钟,混剪视频Agent产出50条爆款,单月变现6位数(喂饭级教程)

混剪视频是指将多个视频片段、图片或音频素材进行剪辑组合,创造出新的视频内容。随着Coze上线联动剪映功能,混剪视频制作正在进入自动化时代,为创作者带来巨大便利。高效自动化处理:AI可以自动完成琐碎的剪辑工作,让创作者省下大量时间专注于项目策划和创意。批量素材产出:特别适用于抖音、小红书和视频号等平台上的养生、科普、心理、疗愈等垂直领域,可以自动化批量生产图片和视频素材。引流获客:通过优质内容吸引目标受众知识变现:通过教学传授技术工具变现:将搭建好的工作流作为产品销售。

汤师爷的博客 866

基于Simulink的伺服电机位置闭环控制仿真

本文带你从零构建了伺服电机位置闭环控制系统​ 的完整Simulink仿真模型,实现了:✅ 搭建PMSM伺服电机、逆变器、机械臂负载的主电路与编码器反馈模型;✅ 用MATLAB Function实现三环控制(位置环PID、坐标变换、电流环PI);✅ 验证阶跃定位(稳态误差0.002°、响应0.08s)与正弦跟踪(误差0.008°)的高性能;✅ 对比开环控制,明确位置闭环在精度、响应、抗扰上的优势;✅ 理解“三环嵌套+反馈校正”的核心思想(精密定位的工程实现)。核心收获。

amy_mhd的博客 173

单篇 Hibernate应用中Java对象的状态

单篇 Hibernate应用中Java对象的状态 前言:Session具有一个缓存,位于缓存中的对象处于持久化状态(解释为什么是3态,而不是4态),它和数据库中的相关记录对应,Session能够在某些时间点,按照缓存中持久化的属性来同步更新数据库,这一过程被称为清理缓存。   1、    Java对象在JVM中的生命周期 当应用程序通过new语句创建一个Java对象时,JVM会为这

好刹那的专栏 797

一文吃透 ABAP RESTful Application Programming Model(RAP):从数据建模与行为,到业务服务暴露,再到服务消费

本文介绍了SAP ABAP统一编程模型RAP的核心架构与实践方法,通过构建完整的ZTRAVEL和ZBOOKING业务对象,演示了从数据建模、行为定义到服务暴露的全流程。文章详细说明了RAP三层架构(数据与行为层、服务提供层、服务消费层)的实现方式,包括CDS视图实体定义、行为定义(BDEF)中的事务能力声明、投影与服务绑定等关键步骤。特别强调了ABAP Cloud环境下的开发限制和最佳实践,如使用GUID和late numbering机制,以及如何通过EML语言操作业务对象。最后提供了完整的代码示例,展示了

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 522

Hibernate 中持久化对象的状态(重要)

Hibernate 持久化对象的状态

weixin_44061521的博客 1077

【ARXML专题】-2-创建一个Classic CAN(经典CAN2.0)/CANFD的系统描述ARXML文件

目录 1 创建一个AUTOSAR系统描述 2 物理层命名以及创建ECU 3 新建一个Frame 4 新建一个PDU 5 新建一个signal 6 结尾 AUTOSAR System Description Network Explorer是一个文件编辑器,支持可视化和编辑系统描述的AUTOSAR系统描述文件和ECU摘录的通信内容,它支持架构版本4.0.3、4.1.2、4.2.1、4.2.2和4.3.0。AUTOSAR系统描述(ARXML)文件是基于XML的文件格式,描述网络通信的元素...

「汽车电子助手」的博客 1万+

rk628d修改默认分辨率

在rk3568上使用628d hdmi转mipi,在628d已经调试好的情况下,客户新增需求:视频输入这边的推荐分辨率固定在1024x768。

m0_60805802的博客 2053

hibernate之使用脱管对象(合并脱管对象的状态)

hibernate之使用脱管对象(合并脱管对象的状态)

fhd001的专栏 1033

C#联合Halcon机器视觉框架源码

本软件参考EV开发,共用模块,基于WPF+Halcon,是非常不错的学习框架,需要什么功能可以自己添加,插件式开发非常方便。

Z's Palace 4829

Hibernate中对象的状态有哪些

Hibernate中对象的状态有哪些

weixin_45428910的博客 386

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Hibernate中Java对象的三种状态及其转换

一、打开oracle数据库,登录scott账户,对scott账户进行测试 二、新建一个java项目,导入hibernate配置文件及scott账户下测试表的映射文件 1.创建java项目 2.打开DB Broweser,创建数据库连接 3.在java项目中,先导入hibernate配置文件,再导入hibernate映射文件、映射类 导入hibernate映射文

Mao的博客 2279

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

hibernate框架中对象的状态

increment:hibernate先会查询数据最大id值,然后在最大值加1在进行保存操作。 hibernate:select max(id) from t_user; insert into User(hiredate,id)values(?,?) native 本地数据库的主键策略。 hibernate对象状态 问题: 问题1: 主键生成策略不同,save操作时发送INSERT语句的时机不同...

KevinLoveJava 295

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Hibernate第四讲:Hibernate对象的状态和映射

一、 Hibernate对象的状态 实体对象的三种状态: 1) 暂态(瞬时态)(Transient)---实体在内存中的自由存在,它与数据库的记录无关。 po在DB中无记录(无副本),po和session无关(手工管理同步) 如:Customer customer = new Customer(); customer.setName("er

爱音乐,爱编程。 937

Hibernate中对象的状态

一、对象状态介绍  1.瞬时状态:自己new出来的对象就是瞬时状态。在数据库表中没有记录和对象相对应。  2.持久状态:调用save方法后,数据库表中有记录和该对象对应,并被session管理。  3.脱管状态:数据库中有记录和该对象对应,但是对象不被session管理。 二、用代码表示 package com.hbsi.test;   import java.util.Da

422

【SSH】SSH之Hibernate框架:持久化类及其要求和对象的状态

持久化类 持久化:将内存中的数据存入硬盘中以便持久保存的过程。Hibernate框架就用于持久化的框架。 持久化类:一个Java类与数据库表建立了映射关系,那么这个类在hibernate框架中就称为持久化类。定义一个持久化类需要一个Java类和与之对应的映射文件。 持久化类的要求 1、构成持久化类的Java类必须提供一个无参构造方法,因为Hibernate底层需要用到反射机制来生成持久化类的实例;...

景谦Nice的博客 340

SSH笔记-Hibernate对象的状态转换

1、对象状态转换跟session的操作函数有关 2、对象状态有三种:临时对象,持久化对象,游离对象 3、对象: (1). 临时对象: session中不存在,数据库中不存在,通过new创建的对象的状态 (2). 持久化对象:session中存在,数据库中存在,调用session的save()、update()、saveOrUpdate()等方法时的对象的状态 (3). 游离对象: ...

oyy的博客 733

五、Hibernate的对象状态及其方法

学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别,比如瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就是已经被保存到数据库中,离线状态就是数据库中有,但是session中不存在该对象。但是大家又是否对hibernate的se...

DOONDO的技术窝 160

Hibernate学习笔记 - Hibernate中持久化对象的状态转换规则

        最近在使用Hibernate,读了读《Hibernate3和JPA程序开发——从入门到精通》这本书,发现其中的有些章节内容写的很好,在这里把自己认为是精华的东西整理出来,既是自勉,同时与大家分享一下。这一篇关注持久化对象中的各种状态的转换规则。        1、关于持久化对象的状态         Hibernate中的持久化对象可能处于如下几种状态下: 暂

Swing's Way 1647

hibernate对象三种状态及其转换

hibernate对象三种状态及其转换 ·瞬时状态(transient):          刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于瞬态的Java对象称为瞬态对象。          瞬态对象(TransientObjects):使用new操作符初始化的对象不是立刻就持久化的。它们的状态是瞬时的,也就是说他们没有任何跟数据库表相关联的行为,只要应用不再引用这些

yazongliu的专栏 786

Hibernate学习(三):Session的缓存及对象的状态

对于session这个接口的学习可以说是最痛苦也是最复杂的,因为它所涉及的方面太多了,一些隐藏的机制也很多,谁让它是Central API呢。对于它的几个最基本的方法如save()、delete()、flush()等的学习都花了我一定的时间。在深入了解这些这些方法前,了解session的缓存机制以及Hibernate中Java对象的状态对我们是很有帮助的。一.Session的缓存Java是

鱼与飞鸟 2271

Session缓存、Hibernate处理对象的状态了解

Session接口是Hibernate向应用程序提供的操纵数据库的最主要的接口,它提供了基本的保存,更新,删除和查询的方法。Session是有一个缓存, 又叫Hibernate的一级缓存session缓存是由一系列的Java集合构成的。当一个对象被加入到Session缓存中,这个对象的引用就加入到了java的集合中,以后即使应用程序中的引用变量不再引用该对象,只要Session缓存不被清空,这个对象一直处于生命周期中。

学习笔记,人工智能,教程,技术分享! 632

Hibernate映射对象的状态

Hibernate映射对象的状态一、Hibernate映射对象的状态二、Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的? 一、Hibernate映射对象的状态   临时状态/瞬时状态(transient):刚刚用new语句创建,没有被持久化 不处于session中(没有使用session的方法去操作临时对象)。该对象成为临时对象   持久化状态/托管状态(persistent):已经被持久化,加入到session的缓存中。session是没有关闭该状态的对象为持久化对象。   游离状态/

faramita_of_mine的博客 381
上一篇: hibernate初级 映射一对多关联关系
下一篇: hibernate初级 对象-映射组成关系
anxin587
博客等级 码龄19年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值