`
chandler
  • 浏览: 81900 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate学习笔记(五)

阅读更多

基本概念
     瞬时状态:现在的理解是一种和hibernate无关的状态。这个状态现在感觉比较简单。因为其不涉及任何和hibernate相关的概念。他就是一个普普通通的类,不涉及任何实体化的对象。
                  其通过save(),saveOrUpdate(),persist(),merge()等方法编程持久化状态。
   持久化状态:就是进入数据库的的状态。
                   其通过delete(),remove()变成移除状态
                   evict(),close(),clear()变成托管状态
     移除状态: 就是一个垃圾。当然,有一个规范就是进入移除状态的不能够再次被使用。
     托管状态:书上说这个状态是最复杂的一个状态。因为其实介于被hibernate管理,但是不做不进数据库的一种状态。在这个状态中,其不保证与数据库同步。也不被放入持久化上下文。并通过重附和合并来恢复其持久化的身份。这个让我很难用言语表达出一个气特定的状态。
       
   持久化上下文:这个概念我觉得很复杂。现在的概念是他是一个池。一个处理持久化对象的池。它有检查脏数据和告诉缓存的作用。这是一个很模糊的概念。
   
   对象的同一性:同一性和java的同一性有着联系。其实Hibernate的作用并不是限于把数据库中的单条记录放入我们使用的对象,而产生一个新的对象。而是涉及类与记录的映射和管理。所以对于Hibernate来说,它需要考虑的一个问题是。其返回的对象和数据库中单条记录的对应的关系。而统一性就是从Hibernate中,在不同的时间点,通过相同或者不同的方法,范围的对象时候有着java中的同一性。
   而这种同一性和java中的同一性相等的范围有个名字叫做同一性的范围(scope of object identity)
   其分为3级
   第一级为没有。就是没有。第二级为持久层的上下文的范围。就是在一个持久化上下文的范围内,保证同一性。最后是过程范围的同一性。保证真个JVM有同一性。
   下面这段代码为hibernate中同一性的范例
    Session session1 = sessionFactory.openSession();
    Transaction tx1 = seesion1.beginTransaction();
    
    //Load Item with identifier value "1234"
    Object a = session1.get(Item.class,new Long(1234));
    Object b = session1.get(Item.class,new Long(1234));

    (a==b)        //true,persistent a and b are identical,因为在一个上下文范围内获取。

    tx1.commit();
    session1.close();

    //References a and b are now to an object in detached state
   //这里让我有了托管状态的感性认识

    Session session2 = sessionFactory.openSession();
    Transaction tx2 = seesion1.beginTransaction();
    
    //Load Item with identifier value "1234"
    Object c = session1.get(Item.class,new Long(1234));

    (a==c)        //false,detached  a and persistent c are not identical

    tx2.commit();
    session2.close();

   托管对象的同一性:
      搞清楚了同一性了,就明白了在Hibernate中,比较关心的是对象和数据库中表记录的一种对应,因为Hibernate关心的是数据库与代码运行时数据的同步问题。
      但是托管对象却有着一些不同。因为其不需要考虑与数据库中同步的问题。因为在Hibernate中,托管对象是和数据库断了线的一只风筝。保存着数据库中的数据,但是和数据库已然没有了任何的关系。所以对于Hibernate来说,其比较关系的已经是其值相等而不是对象相等了。
      所以在书中,也就强调了hascode()和equals()方法的重要性,同时,提出了业务键的概念。
   
    瞬时,脱管与持久化状态
       这三种状态表示的是Hibernate中的3种状态。其与Hibernate的关系分别从瞬时开始,由疏及亲。瞬时与Hibernate的关系最远,脱管次之,而持久化状态的关系最为亲密。
       瞬时对象就是和Hibernate一点关系都没有的对象,对于数据库来说,也没有任何记录与其对应。对于Hibernate来说,不知道其的存在。所以,在书中,被持久化的对象被delete之后,被称之为瞬时对象。
       脱管对象,我对其的理解是,产生这个对象的持久化上下文关闭之后,还存在的对象。这个对象,在数据库中有着一条记录与其对应,也只是对应而已。但是此时的Hibernate却不对这个对象进行任何的管理。除非你自己写sql语句,否则你完全没有办法知道这个对象是否和数据库同步。
       持久化对象,即使由Hibernate管理的对象。理论上来说,这个部分的对象会是最复杂的。因为其要牵涉到很多很多,比如说同步。但是操作上来说它却是最简单的。因为这些工作Hibernate都帮你完成了。这种对象,最常见的就是在上下文中被提取出来的。

     一个对象的三种状态的转换
         觉得,如果明白了以上的3个概念,那么对象之间的只是在使用api而已了。
         一个对象由瞬时,进入持久化,用的是save,因为此时是进入Hibernate的管理
         当一个持久化对象结束时,那么所有的对象统一变成了脱管,因为Hibernate所有的管理是封装在一个持久化上下文里面的。
         而由托管变成持久化对象。就是update(reattach),和merge。
         一个持久化对象变成瞬时,就是使用delete。
         其实所有的变化,无非就是进出持久化上下文。进,则变成持久化对象,出则变成脱管。如果数据库中没有记录与其对应(没进也没出)。那么也就是瞬时。

0
0
分享到:
评论

相关推荐

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    Hibernate学习笔记特别详细

    《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...

    hibernate 学习笔记精要

    hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要

    hibernate学习笔记

    在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....

    Hibernate 学习笔记(全套)

    这套笔记是我学习Hibernate,进行相关技术点训练时记录下来的,其中包括技术点说明与相关事例,拿出来与大家分享。

    Java相关课程系列笔记之十四Hibernate学习笔记

    【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...

    hibernate学习笔记mashibing

    《Hibernate学习笔记——马士兵教程解析》 在Java开发领域,ORM(Object-Relational Mapping)框架的使用已经非常普遍,其中Hibernate作为一款优秀的ORM框架,因其强大的功能和易用性深受开发者喜爱。本文将根据马...

    Hibernate学习笔记与总结

    **Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...

    马士兵hibernate学习笔记(原版)

    ### 马士兵Hibernate学习笔记知识点总结 #### 一、课程内容概览 - **HelloWorld**:通过简单的示例程序介绍如何启动一个基于Hibernate的Java项目。 - **Hibernate原理模拟**:解释O/R Mapping的概念及其重要性。 -...

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    传智播客 汤阳光 Hibernate 学习笔记

    传智播客 汤阳光 Hibernate 学习笔记,非常详细的hibernate学习资料!

    hibernate学习笔记文档

    ### Hibernate 学习笔记知识点概览 #### 一、Hibernate 概述 - **定义**:Hibernate 是一款开源的对象关系映射(ORM)框架,它实现了将 Java 应用程序中的对象模型映射到关系型数据库中的记录。通过 ORM 技术,...

    hibernate API帮助文档 及hibernate学习笔记

    Hibernate是一款强大的Java持久...通过阅读这份“Hibernate API帮助文档”和“Hibernate学习笔记”,你将能够深入理解Hibernate的工作原理,掌握其API的使用,并能在实际项目中有效地利用Hibernate进行数据持久化操作。

    hibernate学习笔记第二天的源码

    在深入探讨Hibernate学习笔记第二天的源码之前,我们先来理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象模型,大大简化了数据访问层的开发...

    马士兵hibernate学习笔记

    ### 马士兵Hibernate学习笔记知识点总结 #### 一、HelloWorld示例 - **目的**:通过简单的示例理解Hibernate的基本使用流程。 - **步骤**: - 创建Java项目`hibernate_0100_HelloWorld`。 - 建立库依赖,包括...

    hibernate学习笔记第四天的源码

    **hibernate学习笔记第四天源码解析** 在hibernate学习的过程中,第四天通常会深入探讨实体类、映射文件、配置文件以及查询语言等方面的内容。这些是hibernate框架的基础,也是开发者掌握持久化操作的关键。让我们...

Global site tag (gtag.js) - Google Analytics