临时状态(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计本
}
}