`

Hibernate学习:Transient、Persistent、Detached三个状态

 
阅读更多

Transient、Persistent、Detached是Hibernate三个核心的状态:
---------------------------------------------------------------------------
Transient状态最大的特征是:
          * 没有id

  * 内存中有对象,数据库中没有,session缓存中没有
          * 没有纳入session的管理
 
Persistent状态最大的特征是:

          * 存在id
          * 在数据库中有与之匹配的数据
          * 纳入了session的管理

Detached状态最大的特征是:

    * 存在
          * 在数据库中有与之匹配的数据
          * 脱离session的管理


---------------------------------------------------------------------------

以下是一段用于说明这三个状态的代码:

 

package com.ahuzl.hibernate;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.Transaction;
import junit.framework.TestCase;

public class SessionTest extends TestCase {

    public void testSession(){
        Session session = null;
        Transaction tx = null;
        User user = null;
        try {
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();

            //Transient状态,临时状态,一经save就会转变到Persistent状态
            user = new User();
            user.setName("中田");
            user.setPassword("nakada");
            user.setCreateTime(new Date());
            user.setExpireTime(new Date());

            //Persistent状态,持久化状态(数据库中有相同的值与之对应),当属性发生改变时,hibernate会自动与数据库同步,不需要update
            session.save(user);
            user.setName("幸島");
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            tx.rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }

        //Detached状态,游离状态,session关闭之后,便由persistent状态变为Detached状态
         try{
            session = HibernateUtils.getSession();
            session.beginTransaction();
            user.setName("幸島");
            //在Detached状态下,更新对象的属性,需要update才能反映到数据库
            session.update(user);
            session.getTransaction().commit();
        }catch(Exception e){
            e.printStackTrace();
            session.getTransaction().rollback();
        }finally{
            HibernateUtils.closeSession(session);
        }
    }
}
分享到:
评论

相关推荐

    《深入浅出Hibernate》读书笔记

    它包括三个状态:Transient(自由状态)、Persistent(持久状态)和Detached(游离状态)。Transient状态的实体对象与数据库无关,只是一个普通的Java对象。而Persistent状态的对象与数据库中的记录绑定,其变更会被...

    Hibernate中的实体状态及转换

    **持久化状态(Persistent) -> 临时状态(Transient)**:在Session关闭之前,如果执行了`delete()`操作,从数据库中删除了实体,那么即使对象的ID与数据库中的某条记录匹配,当Session关闭后,这个对象也将失去与...

    Hibernate3详解

    3. Detached状态:对象曾是Persistent状态,但Session已被关闭,对象变为独立存在,若需要更新数据库,需重新建立Session并进行操作。 Hibernate的操作还包括Flush和Clear: - Flush:将Session缓存中的更改写入...

    hibernate对象三种状态

    在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...

    Hibernate 对象的三种状态和特点

    以下是Hibernate对象的三种主要状态及其特点: 1) 临时状态(Transient State): 当通过`new`关键字创建一个新的对象时,该对象处于临时状态。在这个状态下,对象并未与任何Session关联,因此它的变化不会自动反映...

    Hibernate三种状态区分

    在 Hibernate 中,对象有三种不同的状态,这些状态决定了对象与数据库之间的关联程度以及如何进行数据操作。理解这些状态对于有效地使用 Hibernate 至关重要。 1. **瞬时态(Transient)**: - 瞬时态的对象是刚刚...

    Hibernate三种状态

    Hibernate对象有三种状态:瞬时状态(Transient)、持久状态(Persistent)和脱管状态(Detached)。理解这些状态对于优化数据操作和避免潜在的问题至关重要。 首先,瞬时状态(Transient)是指通过new关键字创建的...

    Hibernate 三种状态

    在 Hibernate 中,对象的状态管理是其核心特性之一,主要包括三种状态:瞬时状态(Transient)、持久化状态(Persistent)以及游离状态(Detached)。本文将详细阐述这三种状态的特点及其转换机制。 #### 二、瞬时...

    hibernate 学习

    在Hibernate中,对象的状态主要有三种:Transient、Persistent 和 Detached。描述中提到的“Transient 对象”是指在Java程序中创建的新实例,比如`User user = new User()`,这个user对象还未与Hibernate的Session...

    Hibernate中对象的三种状态

    在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一...总之,理解Hibernate中对象的三种状态以及它们之间的转换对于开发人员来说至关重要。熟练掌握这些概念有助于编写出更加高效、可靠的Java持久化代码。

    Hibernate学习心得

    在讨论对象的状态时,有三种主要状态: - **瞬态(Transient)**:对象刚被创建,尚未与Session关联,其变更不会同步到数据库。 - **持久化(Persistent)**:对象已与Session关联,其生命周期由Session管理,任何...

    马士兵hibernate学习笔记

    ### 马士兵 Hibernate 学习笔记概览 #### 一、Hello World 示例 - **简介**:通过简单的示例程序来快速入门 Hibernate 框架。 - **步骤**: 1. 创建 Java 项目 `hibernate_0100_HelloWorld`。 2. 构建 User-...

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

    4. **对象的三种状态**:Hibernate中的对象有瞬时态(Transient)、持久态(Persistent)和脱管态(Detached)三种状态,理解这些状态对于理解对象的生命周期和持久化操作至关重要。 5. **关系映射**:Hibernate...

    hibernate源码分析过程

    Hibernate 中的实例状态可以分为三种:transient、persistent 和 detached。transient 状态表示对象尚未被保存到数据库,persistent 状态表示对象已经被保存到数据库,而 detached 状态表示对象已经被从数据库中删除...

    达内HIBERNATE学习笔记

    - **状态**:瞬态(Transient)、持久(Persistent)、游离(Detached)。 - **转换**: - 瞬态转持久:通过`session.save()`方法。 - 持久转游离:通过`session.close()`或`session.clear()`方法。 - 游离转持久...

    05_传智播客hibernate教程_实体对象的三种状态与saveOrUpdate方法

    1. **瞬时状态(Transient)**:当一个新的实体对象在内存中创建,但尚未被Hibernate管理时,它处于瞬时状态。这类对象没有与数据库中的任何记录关联,如果对象消亡,其信息不会保存到数据库。 2. **持久化状态...

    Hibernate学习笔记(三)

    Hibernate将实体的状态分为瞬时(Transient)、持久化(Persistent)、游离(Detached)三种。理解这些状态对于正确使用Hibernate至关重要,例如,当对象需要更新到数据库时,需要将其状态从游离变为持久化。 通过...

    Hibernate的学习笔记

    【Hibernate学习笔记】 Hibernate是一个流行的Java ORM(对象关系映射)框架,它允许开发者将数据库操作与业务逻辑解耦,简化了数据库与Java对象之间的交互。这篇笔记主要涵盖了Hibernate的一些核心概念和常用方法...

Global site tag (gtag.js) - Google Analytics