Hibernate学习:Transient、Persistent、Detached三个状态

Transient、Persistent、Detached是Hibernate三个核心的状态:
---------------------------------------------------------------------------
Transient状态最大的特征是:
          * 没有id

  * 内存中有对象,数据库中没有,session缓存中没有
          * 没有纳入session的管理
 
Persistent状态最大的特征是:

          * 存在id
          * 在数据库中有与之匹配的数据
          * 纳入了session的管理

Detached状态最大的特征是:

    * 存在
          * 在数据库中有与之匹配的数据
          * 脱离session的管理


---------------------------------------------------------------------------

以下是一段用于说明这三个状态的代码:

 

package com.ahuzl.hibernate;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.Transaction;
import junit.framework.TestCase;

public class SessionTest extends TestCase {

    public void testSession(){
        Session session = null;
        Transaction tx = null;
        User user = null;
        try {
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();

            //Transient状态,临时状态,一经save就会转变到Persistent状态
            user = new User();
            user.setName("中田");
            user.setPassword("nakada");
            user.setCreateTime(new Date());
            user.setExpireTime(new Date());

            //Persistent状态,持久化状态(数据库中有相同的值与之对应),当属性发生改变时,hibernate会自动与数据库同步,不需要update
            session.save(user);
            user.setName("幸島");
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            tx.rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }

        //Detached状态,游离状态,session关闭之后,便由persistent状态变为Detached状态
         try{
            session = HibernateUtils.getSession();
            session.beginTransaction();
            user.setName("幸島");
            //在Detached状态下,更新对象的属性,需要update才能反映到数据库
            session.update(user);
            session.getTransaction().commit();
        }catch(Exception e){
            e.printStackTrace();
            session.getTransaction().rollback();
        }finally{
            HibernateUtils.closeSession(session);
        }
    }
}
ENVI5.6 批量处理GF-2/GF-6/GF-7:从安装到融合的完整自动化流程 本文详细介绍了ENVI5.6环境下批量处理GF-2/GF-6/GF-7卫星数据的完整自动化流程,包括环境配置、工具安装、正射校正、图像融合等关键步骤。通过实战案例和优化技巧,帮助用户高效完成高分卫星影像处理,提升工作效率。特别针对GF-6和GF-7的特殊处理要点进行了深入解析。 阅读详情

相关推荐

Keil 5安装教程(C51与MDK共存)

目录前言MDK的安装C51的安装安装完成后的验证新建C51工程添加C51程序文件编译测试总结 前言 本篇文章将介绍嵌入式开发工具Keil 5的安装方法,并使MDK(Microcontroller Development Kit,开发stm32时会用到)和C51(51单片机C语言软件开发系统)共存。今后使用Keil 5可同时开发51单片机程序和ARM单片机程序,便于学习与从51到32的过渡。 注: 为防止商业纠纷,本篇文章不涉及文中软件的注册破解,请支持正版。 同时为了便于今后更深入的学习,本文不会介绍软件的

xushu_me的博客 6万+

Spring配置Hibernate时出现的错误

Spring配置Hibernate时出错,WEB项目的CLASSPATH配置问题:由于Myeclipse版本等问题加载的commons-beanutils.jar包缺少或版本问题引起的。

shanshu12的专栏 998

从零到一:STM32CubeMX虚拟串口开发中的常见陷阱与优化策略

本文深入探讨了STM32CubeMX在USB虚拟串口开发中的常见问题与优化策略,涵盖数据流吞吐量瓶颈、实时性约束等核心挑战。通过实战案例和代码示例,详细解析了波特率同步异常、数据丢失等问题的解决方案,并提供了DMA配置和中断优先级调优的高级技巧,帮助开发者提升STM32虚拟串口的性能和可靠性。

weixin_29164185的博客 370

线程的属性 —— 分离的状态(detached state)、栈地址(stack address)、栈大小(stack size)

一、引入   linux下线程的属性是可以根据实际项目需要,进行设置。之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问题。如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可以通过设置线程栈的大小来降低内存的使用,增加最大线程个数。 t...

zhuguanlin121的博客 2691

vCenter Server出现no healthy upstream的解决方法

可以通过"VMware vCenter Server Management(服务)"来排查问题,在网页里面找到“服务”模块,会发现有很多服务没有启动起来,而且手动启动也无法启动。7.0 地址后,页面出现“no healthy upstream”,无法正常登录vCenter,重启后依旧如此,该故障的前提是没有对vCenter做过任何配置,如下图所示。于是用命令查询是否有证书过期,发现真有多个服务依赖的证书在当天早上过期。使用如下命令尝试打开服务发现不分服务可以打开,不分服务无法打开。

1万+

第十二节:C#工业控制编程基础--输出正弦波实验

第十二节:基于c#使用开发板输出正弦波实验 文章目录第十二节:基于c#使用开发板输出正弦波实验一、实验目的:了解采集卡DA相关函数的使用。二、实验内容:利用C#生成正弦波,然后用采集卡DA输出。三、实验步骤:1.打开Visual Studio 2013,新建窗体应用程序项目,配置好板卡dll文件。2.在窗体中放入控件,对控件进行布局排版,并修改他们的Name属性和Text属性。3.在Chart控件内选择Spline型图表,如图2。4.进入编程区域,在public partial class Form1 :

weixin_49237052的博客 2296

Screen的Attached和Detached状态

Screen 的状态有两种,Attached 和 Detached,分别表示前台运行和后台运行。使用 可以将 Detached 状态的屏幕会话状态修改为 前台运行 ,并同时切换到这个会话中。如果会话状态已经是Attached状态,使用命令 将会报错:There is no screen to be resumed matching 767(会话编号).如果需要切换到状态为Attached 的会话下,需要先执行 将会话状态修改为 Detached。将当前会话转为后台运行可以使用快捷键ctrl + a,d。

zhang_j_mail的博客 1万+

蓝鸟四轴飞控系统C程序V3.0(基础版本)深度解读

2. 解析遥控通道数据(油门 / 横滚 / 俯仰 / 偏航),转换为标准化值(-1000~+1000);3. 封装PID初始化(PID_Init,配置KP/KI/KD、输出限幅、积分限幅);,包含姿态角(Attitude_Data.Roll/Pitch/Yaw)、角速度(Gyro_Data.X/Y/Z)、遥控值(RC_Data[0~5])、电池电压(Bat_Volt)、电机PWM值(Motor_PWM[0~3])、系统状态(Sys_State),校验和通过Check_Sum()函数计算;

搏博的专栏 344

JPA/Hibernate实体类定义联合主键@IdClass注解的使用

学亮编程手记 2710

ArcGIS Pro SDK (二十五)工作流管理器

【代码】ArcGIS Pro SDK (二十五)工作流管理器。

Winemonk 494

YOLOv8改进 | 卷积模块 | 用DWConv卷积替换Conv【轻量化网络】

YOLOv8改进,yolov8,yolov8创新,yolov8涨点

kay_545 7157

hibernate主键生成策略

一、JPA通用策略生成器  通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id,  其生成规则由@GeneratedValue设定的.这里的@id和@GeneratedValue都是JPA的标准用法,  JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出.  Java代码   @Target({M

冰颜小神的博客 417

4.6 知识库使用指南:如何让AI Agent拥有专业知识

本文介绍了如何为AI Agent构建和使用知识库。知识库的作用是为Agent提供专业知识,包含文档、数据和规则,可用于专业问答和知识检索。使用方法包括创建知识库(上传文档)、向量化处理、知识检索以及在Agent中的应用。核心要点是理解知识库的价值和使用流程。文章还提出了构建方法、检索优化和应用实践等思考题,建议准备高质量数据、优化检索效果并持续更新知识库。下节将介绍用LangGraph构建复杂AI应用。

yonggeit的博客 3012

系统学习hibernate之三:transient、persistent、detached状态

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

jwmwdxxxx的专栏 378

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

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Transient、Persistent、Detached三个状态

Transient、Persistent、Detached是Hibernate三个核心的状态: --------------------------------------------------------------------------- Transient状态最大的特征是:           * 在数据库中没有与之匹配的数据           * 没有纳入session的管理

理想之路源于坚持 775

Camera2Demo

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

Hibernate:transient、persistent、detached状态转换图(转载)

transient、persistent、detached状态关系图如下:  1、transient状态的特征:  * 在数据库中没有与之匹配的数据  * 没有纳入session的管理  2、persistent状态的特征:  * persistent状态的对象在数据库中有与之匹配的数据  * 纳入了session的管理  * 在清理缓存(脏数据检查)的时候

FWing的专栏 1942

【SSH快速进阶】——探索Hibernate对象的三种状态:Transient、Persistent、Detached

简单来说,处于Transient的对象,就是我们刚new出来、尚未被session管理的对象。它与数据库没有任何交集(数据库中没有与之对应的数据),可以被看做是携带信息的载体,可以对对象本身的属性、方法进行操作。 Persistent的对象,已经被加入到session缓存中(被session管理)。对持久化状态的对象进行的操作,只是暂时在缓存内部的变化,在commit之前,并没有提交到数据库,但在数据库中存在与之对应

点滴汇聚,智在积累。——Danny 2505

Hibernate学习笔记---Transient、Persistent、Detached三个状态

Transient、Persistent、Detached是Hibernate三个核心的状态: --------------------------------------------------------------------------- Transient状态最大的

java 942

hibernate:transient、persistent、detached状态

transient、persistent、detached状态关系图如下:1、transient状态的特征:  * 在数据库中没有与之匹配的数据  * 没有纳入session的管理  2、persistent状态的特征:  * persistent状态的对象在数据库中有与之匹配的数据  * 纳入了session的管理  * 在清理缓存(脏数据检查)的时候,会和数据库同步  3、detached状态的特征:  * 在数据库中有与之匹配的数据  * 没有纳入session的管理  PS:了解这几种状态对深入使用

xinew的专栏 882

hibernate中处理对象的transient、persistent、detached三种状态

   Hibernate 对应的对象状态有三种,分别为:transient(自由态),persistent(持久态),detached(托管态),相互之间的转化关系如下图所示:  这里需要说明一下:   1:若new的对象id为null,在数据库中没有与之匹配的记录,没有纳入session的管理,则为transient状态。 2:若new的对象id不为null,在数据库中有与之匹配...

xinglei200909931的博客 302

【hibernate框架】对象的三种状态Transient-Persistent-Detached

三种状态分别是 Transient(游离状态),Persistent(持久化状态),Detached(脱管状态)。 Teacher t=new Teacher(); t.setName("t12");//游离状态 t.setTitle("中级");//游离状态 t.setBrithday(new Date());//游离状态 t.setZhicheng(ZhiCheng.A);//游离

程序猿之洞 2012

如何删除detached instance?

问题描述应用实例环境:Spring jpa hibernate3常用数据库表的删除办法,一般都会在DAO类中提供delete.如下例:public class UnitDAO implements IUnitDAO {        private EntityManager entityManager;                @PersistenceContext  

MyJSF的专栏 3133

Hibernate中transient、persistent、detached对象三者区别

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34221276的博客 388

transient、persistent、detached状态

transient、persistent、detached状态关系图如下:   1、transient状态的特征:   * 在数据库中没有与之匹配的数据   * 没有纳入session的管理   2、persistent状态的特征:   * persistent状态的对象在数据库中有与之匹配的数据   * 纳入了session的管理   * 在清理缓存(脏数据检查)的时候,会和数...

i'm thinking... 282

Hibernate实体3种状态Transient/Persistent/Detached

Hibernate实体3种状态Transient/Persistent/Detached 博客分类:  java Hibernate框架  实体对象的生命周期有三种状态:       1.Transient(自由状态)       此时的实体对象和数据库中的记录无关联,只是一个普通的JavaBean。       2.Persistent(持久状态)      

evilcry2012的专栏 570

Hibernate持久化对象三种状态(transient,persistent,detached)

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

Here I Am 299
上一篇: Hibernate中get和load方法的区别
下一篇: Hibernate的merge与update方法的区别
wangshuxing
博客等级 码龄20年 5粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值