hibernate——和数据库关联的对象的三种状态

Vivado 18.3安装全攻略:从下载到配置的完整指南 本文详细介绍了Vivado 18.3的安装全流程,从下载准备到配置优化,特别适合FPGA开发者。文章包含硬件要求、版本选择、组件配置等实用技巧,帮助用户避免常见安装问题,确保稳定运行。重点解析了License配置和系统优化设置,提升开发效率。 阅读详情
和数据库关联的对象有三种状态:瞬时,持久,脱管。

瞬时:在数据库中还没有与该对象关联的记录,仅仅是一个普通的对象而已,超过作用域,就会被回收。一般都是new出来的对象,并且还没有与session建立联系。

持久:与session建立了联系,并且在数据库中已经有了和该对象关联的记录,并且session没有关闭,事务没有提交,处于持久状态的对象,其状态改变,hibernate会检测到,在进行提交时,会影响到数据库中该对象对应的记录。但是,应注意,若是session没有关闭,但事务已经提交,那么当前对象仍然处于持久状态,不过,对象状态的改变不会影响到数据库,只要再开启一个事务,在提交时,就会影响到数据库了。

脱管:数据库中已有记录和这个对象对应,但是当前已经和session失去了关联,此时,若对象发生改变,不会影响到数据库。


如下例:

package com.suo.test;

import java.util.Date;

import org.hibernate.HibernateException;
import org.hibernate.Transaction;
import org.hibernate.Session;

import com.suo.domain.User;
import com.suo.hibernate.HibernateUtil;

public class Test {

	public static void main(String[] args) {
		
		User user=new User();
		
		user.setBirthday(new Date());
		user.setName("suo");
		
		//此时的user对象是瞬时状态(Transient)
		
		addUser(user);
		
		//此时的user对象是脱管的(Detached)
		
	}
	
	public static void addUser(User user){
		Session session=null;
		Transaction transaction=null;
		
		try{
			session=HibernateUtil.getSession();//获得一个连接
			transaction=session.beginTransaction();//开启一个事务
			
			session.save(user);
			
			user.setName("piao");
			
			//此时的user对象是持久的(Persistent)
			
			transaction.commit();/*设置为自动提交,因为hibernate默认的设置为不自动提交,这时候使用的数据库引擎为InnoDB,支持事务*/
			
		}catch(HibernateException e){
			if(transaction!=null){
				transaction.rollback();
			}
			e.printStackTrace();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}
}
注意:在addUser方法中,在session.save(user)之后,对象的状态改变了,由于此时还没有进行事务的提交,并且还和session保持着关联,所以,对象此时处于持久状态,所以,user名字的改变,也会反映到数据库中,数据库中的name,不是之前的suo,而是修改之后的piao。

这三种状态之间转换的关系如下图:

(摘自李勇老师的课件)



Maxwell涡流热损计算:铜导体在50Hz交流下的仿真实践 本文详细介绍了使用Maxwell软件进行铜导体在50Hz交流条件下的涡流热损仿真实践。从涡流热损的基本概念到Maxwell仿真设置、网格划分、结果后处理等关键步骤,提供了实用技巧和常见问题解决方案,帮助工程师准确计算涡流热损,优化电力设备设计。 阅读详情

相关推荐

【科研导航】【计算机视觉与图像处理】从顶刊到潜力股:跨学科(电子/电气/信息)SCI期刊投稿全景图

本文全面解析了计算机视觉与图像处理领域的SCI期刊投稿策略,涵盖从顶刊到潜力股的各类期刊特点。重点介绍了IEEE Transactions系列、Elsevier旗舰期刊以及二区优质期刊的审稿偏好和投稿技巧,特别适合电子/电气/信息交叉学科的研究者。文章还提供了三区、四区期刊的实用投稿建议,帮助科研新手快速找到适合的发表平台。

weixin_30897233的博客 81

Hibernate 数据的三种状态

hibernate 数据的三种状态 ①、临时状态 使用 new语句创建出来的对象 属于 "临时状态",数据只存在与内存中的,目前数据还未存放到数据库中 ②、持久化状态 临时状态的数据,使用 save() 或者 saveOrUpdate() 方法,可以将数据从 "临时状态" 转变成 "持久化状态" ③、游离状态持久化状态的数据,可以使用 evict() 或者 close()...

踏 浪的博客 5034

MongoDB启动失败(service mongod start):Failed to unlink socket file /tmp/mongodb-27017.sock Unknown error

错误日志(/var/log/mongodb/mongo.log): 2019-09-16T06:00:00.251+0000 I CONTROL [main] ***** SERVER RESTARTED ***** 2019-09-16T06:00:00.253+0000 I CONTROL [main] Automatically disabling TLS 1.0, to force-e...

deantzzz的博客 1838

Hibernate正向工程hbm2ddl

       一般在项目开发过程中,使用比较多的就是先建好表,再利用hibernate反向工程生成*.hbm.xml文件跟POJO类,个人认为由于目前所使用的数据库都是关系数据库,而hibernate作为一个ORM,把对数据库的操作都对象化了,更应当从对象出发,生成数据库里面相关表,这样更加符合人认知事物的习惯。                由于hibernate3提供了自带的工具hbm2d...

topMan'blog 212

一文读懂客户健康度

什么是客户健康度?客户健康度为什么重要?怎么计算客户健康度?这篇文章,我们来聊聊。

m0_62700043的博客 1420

Ad hoc网络路由协议概述4——按需路由协议(2)AODV协议 (Ad-hoc on-demand distance vector algorithm protocol)

AODV协议的基本流程。

weixin_42982240的博客 7705

查找数据库对象的关联对象列表

在数据库维护时, 有时需查询数据库对象(如表,视图,存储过程等)的关联(即被参考)数据库对象, 可使用如下自定义存储过程查询. if exists(select 1 from sys.objects where type='P' and nam='spFindObject') drop proc dbo.spFindObject go create procedure dbo.spFin

ap0405140的专栏 1240

英飞凌 AURIX 系列单片机的HSM详解(1)——何为HSM

1. 概述 随着汽车上通信系统越来越复杂,云端远程通信的场景越来越多,信息安全变得越来越重要,在通信领域常用的AES、SHA、RSA等加密算法被越来越多地应用到汽车上。但通常这类加解密算法都需要大量的数学运算,需要消耗很多CPU时间和资源,汽车上的ECU又有比较高的实时性要求,为了节省主CPU的资源,HSM应运而生。 HSM(Hardware Security Module),是MCU上专门用于实现加解密算法的一个外设,它一般会有一个独立的CPU,专门用来进行加解密运算,还有一些针对特定算法的硬件加速器(如

weixin_42967006的博客 4万+

Hibernate 对象的三种状态 持久状态 临时状态 游离状态

Hibernate里有三种对象状态:临时状态  (Transient)、持久状态(Persistent)、游离状态(Detached) 持久状态对象也叫PO (PersistentObject)   临时状态和游离状态的对象也叫VO(ValueObject) 下面分别介绍一下这三种状态: 一、临时状态        临时状态对象是通过实例化的方式注入到内存中,也就是通过New的方式来开辟内

yulinlin_fei的专栏 6403

uniapp [全端兼容] - 实现集成配置百度语音识别转文字,长按或开启录音并将录音文件实时转换为文字,百度智能云API实现上传录音文件并转换成文字案例(苹果安卓App、微信小程序、移动端H5网页)

uniapp对接百度智能云语音识别,uniapp中实现语音识别(app+小程序),百度语音识别录音转文字_百度智能云,uniapp使用百度语音识别语音转文字,uniapp小程序调用百度语音识别,uni-app 百度语音识别文字并展示功能,uniapp配置自定义界面百度语音识别转文字和原生使用方式,uniapp使用百度语音,uni-app语音转文字功能,使用UniApp技术实现录音并将录音转换为文字,uniapp如何实现语音输入功能功能,Uniapp集成百度智能云API实现录音转文字详细教程完整示例代码dem

🏆 前端领域优质创作者 1万+

课题申报新手入门必备指南!利用AI辅助搞定 6大关键部分,高效提升申报成功率(附AI提示词)

以下是我(或团队)与本课题相关的已有基础:【如:承担过的公开课、校本教研活动、教学改革实践、课程建设、区级/校级课题、教学反思积累等】请你完成以下任务:1)判断哪些内容与本课题的研究目标和内容具有直接或间接关联;以下是我当前的研究设想(可能比较笼统):【填写你的研究想法 / 教学困惑 / 初步设想】,请你帮我完成以下任务:1)先判断该设想中隐含的核心研究问题是什么;以下是我目前拟定的研究目标,请你从课题评审视角进行校正:【逐条粘贴你已有的研究目标】,请你帮我:1)判断每个目标是否具体、清晰、可评估;

智能AI让学术科研更容易 917

对象/关系数据库映射(ORM)

ORM的全称是:Object Relational Mapping,即对象/关系数据库映射.当使用一种面向对象的编程语言来进行应用开发时,从项目一开始就采用的是面向对象分析,面向对象设计,面向对象编程,但到了持久层数据库访问时,又必须重返关系数据库的访问方式,这是一种非常糟糕的感觉.于是人们需要一种工具,它可以把关系型数据库包装成面向对象的模型.它就是ORM. ORM框架...

love_everybody的博客 2万+

无人机:DJI Matrice 200 Series_(13).行业应用案例分析

在前一节中,我们介绍了DJI Matrice 200系列无人机的基本硬件配置和性能参数。本节将通过具体的行业应用案例,分析如何利用DJI Matrice 200系列无人机进行二次开发,以满足不同行业的需求。

zhubeibei168的博客 1448

Hibernate的三种对象状态

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

wangtianxiao_haha的专栏 753

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Hibernate实体对象的三种状态以及困惑

Hibernate官方文档manaul中提到,hibernate实体有三种状态:Transient、Persistent、Detached。本文参考了官网手册和http://blog.youkuaiyun.com/hgd250/article/details/2775943这篇博客。 1、Transient状态     An object is transient if it has just

aty 2541

VC中sqlite的使用

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

在Hibernate中,对象有三种状态:临时状态、持久状态和游离状态。

在提交修改的时候.不能正常修改.同事告诉我,是因为我的 提交修改的东西是 一个临时状态.并没有和数据库关联.在Hibernate中,对象有三种状态:临时状态、持久状态和游离状态。临时状态:当new一个实体对象后,这个对象处于临时状态,即这个对象只是一个保存临时数据的内存区域,如果没有变量引用这个对象,则会被jre垃圾回收机制回收。这个对象所保存的数据与数据库没有任何关系,除非通过Session的s

Only for Tech 613

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java三态_Hibernate中java对象的三种状态

java对象的三种状态当前应用通过调用Hibernate API与框架发生交互时,需要从持久化的角度关注应用对象的生命周期持久化生命周期是Hibernate中的一个挂按键的概念,正确地理解生命周期可以更好的了解Hibernate的实现原理 掌握Hibernate的正确用法,Hibernate框架通过Session来管理java对象的状态,在持久化生命周期中java对象存在以下三种状态1瞬时状态(T...

weixin_39860583的博客 132

hibernate 三种对象状态

Hibernate定义并支持下列对象状态(state): 瞬时(Transient) - 由new 操作符创建,且尚未与Hibernate Session 关联的对象被认定为瞬时(Transient)的。瞬时(Transient)对象不会被持久化到数据库中,也不会被赋予...

222

Hibernate三种状态的区分

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

hanchilin的博客 220

Hibernate中Java对象的三种状态

Hibernate中的对象有三种状态:Transient(瞬时),Persistent(持久),Detached(脱管)状态.在持久层的对象也称为PO(Persistence Object),瞬时对象和脱管对象称为VO(Value Object)。1.瞬时状态     由new命令开辟内存空间的Java对象,如 Student stu=new Student("tom","18");如果没有变量对

dashi99的专栏 928

游离状态的对象和瞬时状态的对象有什么区别?

游离状态的对象和瞬时状态的对象有什么区别? 答案一:      Hibernate的对象有3种状态,分别为:瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。          瞬时态           由new命

Java档案 3384

Hibernate的对象状态是什么?并做详细说明

Hibernate的对象状态是什么?并做详细说明 瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。 瞬时态 由new命令开辟内存空间的java对象, eg. Person person = new Person(”amig

张晓丛的专栏 760

hibernate中po对象的三种状态分析

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

victor_mx的专栏 491

Hibernate持久化对象的状态及状态之间的转换

Hibernate持久化对象有如下三种状态: 1 . 瞬态:对象由new操作符创建出来之后,还未与Hibernate Session相关联,对应的数据表中没有该对象对应的数据。瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识,如果程序中失去了对瞬态对象的引用,则该对象会被垃圾回收器处理掉。使用Hibernate Session可以将其持久化 2 .持久化:持久化对象在数据表中有对应的记录,...

weixin_42957479的博客 596

Hibernate中的JAVA对象有三种状态

Hibernate中的对象有三种状态:Transient(瞬时),Persistent(持久),Detached(脱管)状态.在持久层的对象也称为PO(Persistence Object),瞬时对象和脱管对象称为VO(Value Object)。1.瞬时状态     由new命令开辟内存空间的Java对象,如 Student stu=new Student("tom","18");如果没有变量对

车前猛跑 1198

Hibernate实体对象的三种状态

? ? ? ? ? ? ? ?所谓Transient,即实体对象在内存中的自由存在,它与数据库中的记录无关。如: [code="java"] public void methodA(){ User user = new User(); user.setName("Huangt"); ...

我的java空间 201
上一篇: hibernate——初步认识
下一篇: hibernate——Session接口中定义的saveOrUpdate()方法浅析
hackerain
博客等级 码龄16年 753粉丝 220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值