ORM进阶:Hibernate对象的三大状态

简介

Hibernate负责将实体模型,关联到关系模型。那么在程序运行过程中,如何保证实体对象与数据库中的一致性呢?

首先要了解一下Hibernate对象中的三种状态:

三种状态

  • 临时状态(Transient)
  • 持久状态(Persistent)
  • 游离状态(Detached)

状态的含义

临时状态

在程序中第一次使用该对象。(既然是第一次使用实体对象,那么当然数据库中是没有该记录的)

即:实体模型中存在,但是不被Session管理,数据库中没有该记录

持久状态

当临时状态的对象,执行save() 或SaveOrUpdate()方法之后,将会被Session管理。从而变成持久状态。这种状态时

即:实体模型存在,而且被Session管理了。数据库中已经存在该记录了(但是由于该记录权限不足,而无法在看到)

游离状态

持久状态的对象,在提交事务之后,将编程游离状态。提交事务,Session将关闭。

此刻的状态为:没有被Session管理,数据库中有该记录

状态转换图

简单实例

public void testSave1(){
    Session session=null;
    Transaction tx=null;
    try{
        session=HibernateUtils.getSession();
        tx= session.beginTransaction();
        //创建一个新对象
        User user=new User();   //Transient状态
        user.setName("张三");
        user.setPassword("123");
        //Persistent状态的对象,当对象的属性发生变化的时候
        //Hibernate在清理缓存(脏数据检查)的时候,会和数据库同步
        session.save(user); //由Transient状态变为Persistent状态
        tx.commit();    //由Persistent状态变为detached状态
    }catch(Exception e){
        e.printStackTrace();
        if(tx!=null){
            tx.rollback();
        }
    }finally{
        HibernateUtils.closeSession(session);
    }
}

总结

这仅仅是一个非常简单的例子。Hibernate中对象的状态转换关系,每次在执行图中所示的方法的时候 会发生改变。

对于Hibernate对象状态的转换,如果在代码中跟一下,每执行一步,对比看Session和数据库中的记录。很容易就能明白状态是如何转换的了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 20:20:43

ORM进阶:Hibernate对象的三大状态的相关文章

ORM进阶之Hibernate中对象的三大状态解析

ORM进阶之 ORM简单介绍 ORM进阶之Hibernate简单介绍及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 在Hibernatea中每一个对象都有三种状态,他们在这三种状态下,Hibernate会他们进行不同的处理.下边我们通过一张图来看一下这三种状态以及他们之间的互相转换! 能够看到对象可能会有这三种状态.暂时状态(transient),持久化状态(persistent).游离状态(detached).下边我们来分别来解释一下这三

hibernate对象三种状态

hibernate里对象有三种状态: 1,Transient 瞬时 :对象刚new出来,还没设id,设了其他值. 2,Persistent 持久:调用了save().saveOrUpdate(),就变成Persistent,有id 3,Detached  脱管 : 当session  close()完之后,变成Detached. 例子程序: Teacher类: 1 package com.oracle.hibernate.id; 2 3 import javax.persistence.Enti

ORM进阶之Hibernate中关系映射

ORM进阶之 ORM简介 ORM进阶之Hibernate简介及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 ORM进阶之Hibernate中一对一的关系映射 映射可以说是在hibernate中非常重要的一个内容,通过映射可以让程序员不再思考复杂的sql语句,而是更加的专注于业务逻辑的实现.映射通过一个xml配置文件完成并且我们可以对他进行修改!下边我们来看一下如何完成映射的! 单表映射 每个实体对应一张表,跟其他的实体没有关联关系,这是最简

ORM进阶之Hibernate 的三大对象

ORM进阶之 ORM简介 ORM进阶之Hibernate 简介及框架搭 ORM进阶之Hibernate 的三大对象 我们在上一篇博客中讲到了如何搭建一个Hibernate框架, 提到Hibernate我们就不得不说他的三大对象,Configuration,SessionFactory , Session .下边我们就分别来解释一下这三大对象! Configuration对象 Configuration类用来管理我们的配置文件的信息的,通过它,我们可以通过创建一个configuration实例来管

Hibernate -- xxx.hbm.xml ORM元数据 表对象关系映射文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- ORM元数据 表对象关系映射文件 p

Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: Hibernate的内部执行过程(CRUD) 对象的状态及其转换图和例子 使用JUnit测试 使用getCurrentSession代替openSession ThreadLoacl对象 享元模式 session.update(obj),为保证执行更新,推荐使用session.flush()刷新缓存; 1和2大概总结了Hibernate运行的技术原理,那么现在总结一下它自身的编写过程:如下: 其中本质上主要

hibernate对象的几种状态

Hibernate 对象的几种状态 临时状态(Transient):new 出来的对象.  对象无 id,缓存和数据库中均没有 游离状态(Detached):内存中有,缓存中没有,数据库中有 id 持久化状态(Persistent):内存,缓存,数据库中均有 id 删除状态: 例: 未入职前   -----> -----> ----> ---->  临时 入职后      -----> -----> ----> ---->  持久化 请假      ----

hibernate映射对象三种状态的分析

一,首先hibernate中对象的状态有 三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate(). get().load():持久态到瞬态的方法有delete():游离态到持久态的方法有update().saveOrUpdate(). lock():持久态到游离态的方法有:session.close().session.evict().session.clear(). 二,Hibernate的状态 hiberna

hibernate对象的三种状态及转换

hibernate对象的三种状态转换关系图 三种状态 瞬时状态(transient): 通过new创建对象后,对象并没有立刻持久化,  它并未参与数据库中的数据有任何的关联,此时java对象的状态为瞬时状态.session对瞬时状态的对象一无所知,当对象不再被引用时,她的数据也就丢失了, 对象将会被java虚拟机按照垃圾回收机制处理. 持久状态(persistent): 当对象与session关联,被session管理时,它就处于持久化状态.处于持久状态的对象拥有数据库的标志.对象什么时候与se