ORM框架Hibernate (二) 持久化对象的三种状态分析

ORM框架Hibernate (二) 持久化对象的三种状态分析

  1. 引入
    1. 在解压Hibernate有好几十兆就感觉这比Struts大多了,应该比Struts要深奥一些果然是这样,不过如果你看了这篇文章,你也会理解的。
    2. 这里先不说对象的状态,本来对象挺简单的Hibernate又把对象分了三种状态,初次让人看了有点头晕的感觉怎么这么复杂?
    3. 通过看了一些资料体会是不应该先理解各种状态以及他们的用法,而应该先重点理解一下Hibernate里面的session缓存机制,如果对session理解了自然而然的就懂了对象的状态。
    4. Hibernate中session并不是通常用的那个会话session,此session非彼session。
  1. Session机制
    1. Hibernate中加入session是为了减少访问数据库频率、提高数据库性能,在session中定义了Java集合,Java Collection指的是List、Map、Set等,这些都实现了Java Collection接口,他们用于存储很多的实体对象并构成了session缓存。
    1. 当像Java对象被session管理时,对象会加入到session的Map里面缓存起来,session提供了一些方法可以保证缓存与数据库状态保持同步。
      1. 例如你提交事务的时候会自动清理缓存,并更新数据库;当然你也可以手动调用flush()方法实现。
    1. 下面就出现了对象三种状态
      1. 如果一个实体对象加入到了Session的Map里,Map会保存该对象的一个引用,这个对象就会被session管理,这个时候我们就称该对象为持久化对象(Persistent)。
      2. 没有被session管理的对象成为非持久化对象,非持久化又分为临时对象(Transient)和游离对象(Detached)。
  1. 对象三种状态
    1. 临时状态(Transient)
      1. 说的通俗一点就是一个对象刚创建的时候,没有被其它对象引用,从对象生命周期来看刚刚创建所以数据库中也不会有它的记录。
    1. 持久化状态(Persistent)
      1. 它是关联session的对象,即被session引用了同时数据库中也存在它的记录。
    1. 游离状态(Detached)
      1. 游离对象是断开了session关联,数据库中已经它对应的数据了,由此可见,可以对象状态是与session紧密联系的。
    1. 对象的三种状态之间可以相会转换,看下面一张图
      1. ORM框架Hibernate (二) 持久化对象的三种状态分析
      1. 上图清楚的说明了各个对象之间得转化关系以及调用方法。
  1. CRUD操作
    1. Hibernate的CRUD是建立在对象各种状态之上的操作,它也提供了一些简单接口供我们使用,利用这些接口让我们插入、更新、分页变得很简单,以前分页需要写好几个SQL语句嵌套才能完成,如果在Hibernate中只需要调用Query接口的setFirstResult()和setMaxResults()就可以分页,很简单。
    1. 知道了对象的状态,对对象的操作也就会了,就不举例子说明怎么插入查询等,主要还是理解了一些概念。对于操作经常使用就会熟悉。
    1. 框架带来的好处还是很多的,建议多使用框架。

转载于:https://www.cnblogs.com/lilongsheng1125/p/4978569.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110043.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • linux怎么进入图形化界面_linux启动过程详解

    linux怎么进入图形化界面_linux启动过程详解GlassFish社区实现了开源JavaEE5应用服务器。GlassFish是一款强健的商业兼容应用服务器,达到产品级质量,可免费用于开发、部署和重新分发。GlassFish是用于构建JavaEE5应用服务器的开源开发项目的名称。它基于SunMicrosystems提供的SunJavaSystemApplicationServerPE9的源代码以及Or…

    2022年8月22日
  • java做服务器,android做客户端,实现数据传输

    许久未动笔,有个小项目开始动工。需要用一台windows电脑做服务器,在android端与其进行数据交换,实现一些业务。简单起见,用java写这个服务器,以前没做过,试试水。很简单的代码,纯粹找思路。服务器端代码:package com.test;import java.io.IOException;import java.io.OutputStream;impor

    2022年3月11日
  • css页面自适应屏幕大小_html图片自适应屏幕

    css页面自适应屏幕大小_html图片自适应屏幕两种方法(1)原生自适应@mediascreen表示当屏幕大于320px,并小于1156px是执行下面的css@mediascreenand(min-width:320px)and(max-width:1156px){ .site-bg-dl{ position:fixed; height:100%; widt

    2022年8月13日
  • 没有智商,善良有个P用

    没有智商,善良有个P用文|江夜雨我们平时最常遇到的麻烦,往往都来自“好人们”。你的大伯,一位家庭健康的坚定守卫者。每天发送各类伪科学:“西医是药,中医是养,你还在迷信西医吗?”“疫苗就是病毒,小孩能受得了吗?”抗住儿媳的巨大压力,他坚决不让自己的孙子接种疫苗,小孩后来成功患上乙肝,小夫妻几乎闹到离婚。他委屈,我是好心啊。你的同事,一位关心全世界人…

    2022年6月4日
  • Windows搭建Ldap服务器

    Windows搭建Ldap服务器Windows搭建Ldap服务器RerferenceSofewareLdapServer安装包openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exeLdap客户端LdapAdmin.exe安装一路next到install即可。配置文件1slapd.conf2找到include./schema/c

    2022年5月14日
  • WinForm设置控件焦点focus

    winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种方法:①设置tabindex把该文本框属性里的tabIndex设为0,焦点就默认在这个文本框里了。②Winfor

    2021年12月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号