Hibernate 中四种对象状态变化过程详解

临时状态(transient):刚用 new 语句创建,还没有被持久化,并且不处于 Sesssion 的缓存中。处于临时状态的 Java 对象被称为临时对象。

持久化状态(persistent):已经被持久化,并且加入到 Session 的缓存中。处于持久化状态的 Java 对象被称为持久化对象。

删除状态(removed):不再处于 Session 的缓存中,并且 Session 已经计划将其从数据库中删除。处于删除状态的 Java 对象被称为删除对象。

游离状态(detached):已经被持久化,但不再处于 Session 的缓存中。处于游离状态的 Java 对象被称为游离对象

实例分析如下:

package com.java1234.service;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.java1234.model.Class;
import com.java1234.model.Student;
import com.java1234.util.HibernateUtil;

public class StudentTest {
    
    public static void main(String[] args) {
        SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
        Session session=sessionFactory.openSession(); // 生成一个session
        session.beginTransaction(); // 开启事务
        
        Class c1=new Class(); // 临时对象1    步骤1
        c1.setName("08计本");
        
        Class c2=new Class();  // 临时对象2  步骤1
        c2.setName("09计本");
        
        session.save(c1); // 持久化对象    步骤2
        session.save(c2); // 持久化对象     步骤2

      //执行完步骤2时数据库表中只有2条空数据
        
        session.delete(c2); // 删除对象     c2对象的步骤3    
        
        session.getTransaction().commit(); // 提交事务后,数据库中才插入了实际的数据
        session.close(); // 关闭session    c1对象的步骤3,假如c2没删除的话执行close方法,c1和c2对象都会变成游离对象,
        
        System.out.println(c1.getName()); // 游离对象,会打印输出08计本
        System.out.println(c2.getName()); // 删除对象,会打印输出09计本
    }
}


 

猜你喜欢

转载自blog.csdn.net/qq_40135955/article/details/89037083