`
tansitongba
  • 浏览: 503464 次
文章分类
社区版块
存档分类
最新评论

Follow Me:深入浅出学习Hibernate三:Session三种状态详解

 
阅读更多

声明

Session是一个持久化管理器,对数据库进行操作之前,必须先取得Session实例,相当于JDBC在对资料库操作之前,必须取得Connection实例,Session是Hibernate操作的基础,它不是线程安全的,但是我们可以用ThreadLocal(用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本,这样使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。)来保证线程的安全性。

状态描述

1.瞬时对象(Transient Object):

使用new操作符初始化的对象不能立刻就持久的。它们的状态时瞬时的,也就是说它们没有任何跟数据库相关联的行为,在数据库中没有与之匹配的记录,还没有让session管理。

总结:

1.没有被session管理

2.在数据库中没有与之匹配的记录

2.持久化对象(Persistent Object):

持久实例是任何具有数据库标识的实例,它有持久化管理器Session统一管理,持久实例是在事务中进行操作的一一它们的状态事务结束时同数据库进行同步。当事务提交时,通过执行SQL的INSERT、UPDATE和DELETE语句把内存中的状态同步到数据库中。

总结:

1. 纳入session管理

2.在数据库中有与之匹配的记录

3.当属性改变,在清理缓存是(脏数据检查)会自动和数据库同步

3.离线对象(Detached Object):

Session关闭之后,持久化对象变成为离线对象。离线表示这个对象不能再与数据库保持同步,它们不能再接受hibernate管理。

总结:

1. 没有被Session管理

2. 在数据中存在与之匹配的记录



图例注解

文字有时候是苍白的,如何更好展现自己的思维,需要我们借助图形的力量,这样我们的思维更加深刻,请看Session三种状态图,让你知道状态是如何进行转化。

(通过一系列的方法,改变Session状态)

三种状态的区分:

1. 有没有ID,(如果没有则是Transient状态)

2. ID在数据库中有没有

3. 在内存里有没有(Session缓存)


总结

想必大家对Session的状态有了一定的了解,那我们就在总结一下,便于我们理解的区别。

Transient对象:随时可能被垃圾回收器回收(在数据库中没有于之对应的记录,应为是new初始化),而执行save()方法后,就变为Persistent对象(持久性对象),没有纳入session的管理。( 内存中一个对象,没有ID,缓存中也没有)

Persistent对象:在数据库有存在的对应的记录,纳入session管理。在清理缓存(脏数据检查)的时候,会和数据库同步。( 内存中有、缓存中有、数据库有(ID)
Detached对象:也可能被垃圾回收器回收掉(数据库中存在对应的记录,只是没有任何对象引用它是指session引用),注引状态经过Persistent状态,没有纳入session的管理。(内存有、缓存没有、数据库有(ID)


分享到:
评论

相关推荐

    followme:RoboCup @ home SPL中的Followme代码

    followme(靛蓝)-0.0.1-0 通过在Thu, 02 Jul 2015 05:33:48 -0000运行/usr/bin/bloom-release --rosdistro indigo --track indigo followme ,将followme存储库中的软件包发布到了indigo发行版中。 followme...

    圆梦小车FollowMe全集

    "圆梦小车FollowMe全集"是一套专注于智能机器人技术的教育资源,旨在帮助学习者了解和掌握如何设计、编程以及操控智能跟随车辆。在这个全集中,我们可以期待涵盖多个方面的内容,包括硬件构建、软件开发、传感器应用...

    寻迹小车 FollowMe 项目

    "寻迹小车 FollowMe 项目"是一个基于C语言编程的智能小车开发项目,旨在实现小车能够自动追踪预设路径或者跟随特定目标移动。在这个项目中,开发者需要掌握C语言的基础语法以及一些高级特性,同时理解嵌入式系统的...

    FollowMe:android 项目 - 该应用程序提供跟踪和紧急警报服务

    总结,"FollowMe"是一款以Java为基础,结合Android系统API和第三方服务构建的定位跟踪与应急报警应用。它的开发涵盖了Android应用开发的多个方面,包括位置服务、地图集成、后台服务、权限管理以及用户界面设计等,...

    Follow-Me:深度学习架构可帮助无人机瞄准并关注人们

    $ git clone https://github.com/BrunoEduardoCSantos/Follow-Me.git 安装依赖项 您需要安装Python 3和Jupyter Notebooks才能执行此项目。 如果还没有安装的话,最好的方法是将Anaconda与一起使用。 如果出于某种...

    编译原理实验报告(含代码:状态转换图;DFA扫描;First集,follow集计算)

    本实验报告主要涵盖了三个关键实验:状态转换图、DFA扫描以及First集和Follow集计算,旨在提升学生对编译过程的理解和实践技能。 首先,实验一涉及状态转换图。状态转换图是一种形式化的工具,用于描述词法分析的...

    ardrone_followme:ROS-stack 来制作一个跟随一个人的 AR.Drone。 基于AutonomyLabardrone_autonomy

    ardrone_followme ROS-stack 来制作一个跟随一个人的 AR.Drone。 使用 AutonomyLab/ardrone_autonomy、ardrone_driver 和 ardrone_joystick。

    FollowMe轻博客

    "FollowMe轻博客"是一个基于面向对象编程和MVC(Model-View-Controller)设计模式构建的博客系统。这个系统的主要特点是结构清晰、易于维护和扩展,特别适合那些希望快速搭建个人博客或轻型社交平台的用户。"仿点点...

    followme:使用 Rails 4 + RSpec + Cucumber 进行行为驱动开发

    $ git clone git@github.com:krahman/followme.git 安装 gem $ bundle install --path vendor/bundle 迁移数据库 $ bundle exec rake db:migrate 运行用户对象单元测试 RSpec $ bundle exec rspec spec/models/...

    DEWI PROJECT_FOLLOWME_arduino_Microcontroller_源码

    《DEWI PROJECT_FOLLOWME_arduino_Microcontroller_源码》项目是基于Arduino微控制器实现的“Follow Me”(跟我走)程序,适用于自动购物车或类似应用。该项目旨在通过编程让设备跟随特定信号源移动,比如一个携带...

    jquery-scroll-follow.rar_Follow_ Follow

    《jQuery Scroll Follow插件详解与应用实践》 在网页设计中,为了提升用户体验,有时我们需要让某些元素在用户滚动页面时依然保持在视窗可见范围内,这种效果被称为“跟随滚动”或“固定定位”。jQuery Scroll ...

    SkyEye仿真Follow me

    ### SkyEye仿真Follow Me 关键知识点 #### 一、SkyEye简介 - **定义与目标**:SkyEye是一款开源的嵌入式系统仿真工具,旨在为开发者提供一个无需实际硬件即可进行嵌入式系统开发与研究的平台。其主要目标是在Linux...

    独立微博Follow5:30天内将暂停所有服务运营.docx

    【Follow5独立微博服务暂停】 Follow5,一个曾经备受关注的独立微博平台,于2021年11月4日宣布了一项重大决定,即在接下来的30天内暂停所有服务运营。这个消息由其运营总经理毕杨通过个人新浪微博账号发布,引发了...

    Follow-me-Learning-C.zip_Follow_ Follow

    总的来说,这份"Follow-me-Learning-C.zip"压缩包为学习者提供了一条清晰的学习路径,通过系统的课程设计和实例讲解,帮助学习者逐步掌握C语言的核心概念和技术,无论是对于初学者还是有经验的程序员,都是一份宝贵...

    浅谈:nofollow标签的使用与分析

    nofollow是链接的HTML标签属性,站长和SEO人员可以通过这个属性来告诉搜索引擎不要追踪此网页上的链接,或不要追踪某个指定的链接, 这些或这个链接并不是本网站所推荐的...链接一旦使用nofollow之后,就不会导出权重了

    基于Java的Follow Me运动教练应用设计源码

    本项目为“基于Java的Follow Me运动教练应用设计源码”,包含61个文件,其中包括54个Java源文件、4个PNG图像文件、1个Gitignore忽略配置文件、1个XML配置文件以及1个YAML配置文件。该应用旨在为用户提供个性化的运动...

Global site tag (gtag.js) - Google Analytics