`
wjt276
  • 浏览: 650510 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

004---持久对象的生命周期介绍(一)

阅读更多

久化对象的状态:

1、   瞬时对象(Transient Object)使用new操作符初始化的对象不是立刻就持久的。它们的状态是瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所引用),它们的状态将会丢失,并由垃圾回收机制回收

2、   持久化对象(Persistent Object)持久实例是任何具有数据库标识的实例,它有持久化管理器Session统一管理,持久实例是在事务中进行操作的----它们的状态在事务结束时同数据库进行同步。当事务提交时,通过执行SQLINSERTUPDATEDELETE语句把内存中的状态同步到数据库中。

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

 

 

 

 

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

Persistent对象:在数据库有存在的对应的记录,纳入session管理。在清理缓存(脏数据检查)的时候,会和数据库同步。

Detached对象:也可能被垃圾回收器回收掉(数据库中存在对应的记录,只是没有任何对象引用它是指session引用),注引状态经过Persistent状态,没有纳入session的管理

 

 

Junit简介:

编写测试类xxxTest,需要继承TestCase

编写单元测试方法,测试方法必须以test开关,测试方法不能含有参数和返回值,如:

         Public void testHello1(){}

最好单元测试的代码单独建立一个目录。

 

------2009/10/17--------------

赃数据检查(版本比较)

try {

            session = HibernateUtils.getSession();

            tx = session.beginTransaction();

           

            //Transient状态

            user = new User();

            user.setName("李四");

            user.setPassword("123");

            user.setCreateTime(new Date());

            user.setExpireTime(new Date());

           

            /*

             * persistent状态

             * persistent状态的对象,当属性发生改变的时候,hibernate会自动和数据库同步

             */

            session.save(user);

           

            user.setName("王五");

           

            tx.commit();

        } catch (Exception e) {

            e.printStackTrace();

            tx.rollback();

        } finally {

            HibernateUtils.closeSession(session);

        }

 

 

 

 

 

session现在插入一条数据:User 对象name: 李四,现在需要修改数据,修改数据时采用数据版本的比较,修改之前对现有数据记录照一个快照(这个快照为最新数据“name:李四”),现在要User对象的name更改为五王(name:五王),当session提交事务之前时commit(),需要清理缓存(也称为賍数据对比),查看哪些数据需要发innertSQL语句,而哪些需要发update语句。此处发出两条(第一条:为innert语句添加;第二条:在賍数据对比时发现数据发生改变,就发出update语句)

Hibernate: insert into User (name, password, createTime, expireTime, id) values (?, ?, ?, ?, ?)

Hibernate: update User set name=?, password=?, createTime=?, expireTime=? where id=?

完整代码如下:

public void testSave1(){

        Session session = null;

        Transaction tx = null;

        User user = null;

       

        try {

            session = HibernateUtils.getSession();

            tx = session.beginTransaction();

           

            //Transient状态

            user = new User();

            user.setName("李四");

            user.setPassword("123");

            user.setCreateTime(new Date());

            user.setExpireTime(new Date());

           

            /*

             * persistent状态

             * persistent状态的对象,当属性发生改变的时候,hibernate会自动和数据库同步

             */

            session.save(user);

           

            user.setName("王五");

            //实际上user.setName("王五")此时已经发出一条update指令了。

            //也可以显示的调用update指定

            //session.update(user);

           

            tx.commit();

        } catch (Exception e) {

            e.printStackTrace();

            tx.rollback();

        } finally {

            HibernateUtils.closeSession(session);

        }

       

        /*

         * 从此处开始session已经在上面关闭,这时user对象状态就变为detached状态,

         * 所有user对象已经不被session管理,但数据库中确实存在与至对应的记录(王五)

         */

        //detached状态

        user.setName("张三");

       

 

  • 大小: 11.6 KB
  • 大小: 2.3 KB
分享到:
评论

相关推荐

    Hibernate持久化对象的生命周期

    Hibernate的核心概念之一就是持久化对象的生命周期,这涉及到对象在数据库中的状态及其与Session的关系。 首先,我们来看一下Hibernate中持久化对象的三种基本状态: 1. **瞬时对象(Transient Objects)**: - ...

    Hibernate对象的生命周期

    Hibernate对象的生命周期 Hibernate对象的生命周期 Hibernate对象的生命周期

    hibernate持久化对象生命周期[参照].pdf

    本文将深入探讨Hibernate中的持久化对象生命周期,包括瞬时对象、持久化对象和游离对象的状态转换及其特性。 1. 瞬时对象(Transient Objects) 瞬时对象是指通过`new`操作符创建但尚未与数据库记录关联的Java对象...

    08 领域对象的生命周期 87-101.rar

    综上所述,领域对象的生命周期管理是软件开发中至关重要的一部分,它涉及到对象的创建、使用、状态管理、持久化、查询和销毁等多个环节。理解和掌握这些知识点对于构建高效、稳定且符合业务需求的系统至关重要。在...

    08 领域对象的生命周期 102-116.rar

    3. **持久化框架**:在实际应用中,领域对象的生命周期往往与数据存储紧密相关。ORM(对象关系映射)框架如 Hibernate 或 Entity Framework 可以帮助我们将领域对象与数据库中的记录进行绑定,从而实现对象的持久化...

    测试实体对象的生命周期

    在IT行业中,尤其是在Java开发领域,实体对象的生命周期管理是至关重要的一个环节,尤其是在使用ORM(Object-Relational Mapping)框架如Hibernate时。本文将详细探讨“测试实体对象的生命周期”,并结合给定的标签...

    T21.4_持久化对象生命周期 java 经典教程 经典教材

    T21.4_持久化对象生命周期 java 经典教程 经典教材

    hibernate的生命周期

    在Hibernate中,每个持久化对象都有一个生命周期,理解这些生命周期状态对于优化性能和正确管理数据库记录至关重要。 **一、持久化对象的状态** 1. **瞬时态(Transient)**:对象刚刚被创建,尚未与Session关联,...

    hibernate5--2.数据持久化及事务

    通过Session的save()或persist()方法,我们可以将瞬时对象转换为持久对象,确保其状态被持久化到数据库。 **持久化对象的生命周期:** - **瞬时态(Transient)**:对象刚刚创建,尚未与Session关联,此时对象状态...

    深入理解持久化对象

    持久化对象是Hibernate框架的核心概念之一,通过合理的状态管理和生命周期控制,可以极大地提高应用程序的开发效率和维护性。理解和掌握持久化对象的状态转换及修改方法,对于高效使用Hibernate框架至关重要。

    Activity生命周期详解

    在这个例子中,我们创建了一个名为`LifeCycleActivity`的`Activity`类,并在每个生命周期回调方法中记录了日志消息。这样可以帮助开发者跟踪`Activity`的生命周期状态变化,并据此调整代码逻辑。 总结来说,理解`...

    JPA学习笔记-EJB-05JPA实体对象状态和实体对象的高级操作

    实体监听器是一种特殊的类,它可以监听实体对象生命周期中的某些事件,如插入、更新或删除等,并在这些事件发生前后执行特定的操作。实体监听器主要用于日志记录、数据验证等场景。 1. **实体监听器注解** 实体...

    hibernate3.2生命周期

    总结,理解Hibernate3.2中的对象生命周期是有效使用Hibernate的关键。正确管理对象状态,能够避免数据丢失,提高应用程序性能,并减少潜在的并发问题。深入源码和使用专业工具能进一步提升开发效率。

    hibernate session生命周期示例

    在Java的持久化框架中,Hibernate是一个非常重要的存在,它为开发者提供了强大的对象关系映射(ORM)功能,简化了数据库操作。本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个...

    java-hibernate持久化

    "java-hibernate持久化"这个主题主要关注如何使用Hibernate来管理对象的生命周期和状态,以及其内部的一级缓存机制。 首先,我们讨论Hibernate中的持久化对象状态。这些状态定义了对象与Hibernate Session的关系,...

    hibernate核心API

    本文将详细介绍Hibernate中持久化对象的三种生命周期状态:瞬态、持久和脱管,并解释每种状态的特点以及如何在这些状态之间进行转换。 #### 二、持久化生命周期概述 Hibernate的核心设计理念之一就是对象状态管理,...

    hibernate:java持久化对象详解01

    - Session:它是Hibernate的核心接口,负责管理对象的生命周期,包括创建、加载、更新和删除对象。 - Transaction:在Hibernate中,事务是数据库操作的基本单元,用于确保数据的一致性和完整性。 - Entity:持久...

    Servclet 生命周期

    ### Servlet 生命周期详解 #### 一、概述 Servlet 是 Java Web 开发的核心技术之一,它主要用于构建动态网页。Servlet 的生命周期是指从Servlet 被加载到 Servlet 容器中直到最终被销毁的过程。在这个过程中,...

    微信小程序页面的生命周期和参数传递

    在本示例项目中,我们将深入探讨微信小程序页面的生命周期和参数传递。 首先,理解页面的生命周期是开发微信小程序的关键。每个小程序页面都有其特定的生命周期,包括加载、显示、隐藏和卸载等阶段。以下是一些关键...

Global site tag (gtag.js) - Google Analytics