Hibernate持久化对象的三种状态

Hibernate中持久化对象的状态有:Transient、Persistent、Detached

Hibernate持久化对象的三种状态

持久化对象的生命周期是:

Hibernate持久化对象的三种状态

怎样理解持久化对象的三种状态呢?下面的代码会体现出来

package com.bjpowernode.hibernate;

import java.util.Date;

import junit.framework.TestCase;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class SessionTest extends TestCase {

public void testSave1() {
  Session session = null;
  Transaction tx = null;
  try {
   session = HibernateUtils.getSession();
   tx = session.beginTransaction();
   
   //此时对象刚new出来,对象为Transient状态,在数据库中不存在
   User 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();
   if (tx != null) {
    tx.rollback();
   }
  }finally {
   HibernateUtils.closeSession(session);
  }
  //detached状态
 }
 
 public void testSave2() {
  Session session = null;
  Transaction tx = null;
  try {
   session = HibernateUtils.getSession();
   tx = session.beginTransaction();
   
   //Transient状态
   User user = new User();
   user.setName("张三");
   user.setPassword("123");
   user.setCreateTime(new Date());
   user.setExpireTime(new Date());
   
   //Persistent状态
   //Persistent状态的对象,当对象的属性发生改变的时候
   //hibernate在清理缓存(脏数据检查)的时候,会和数据库同步
   session.save(user);
   
   user.setName("李四");
   
   //可以显示的调用update方法,因为此时为持久状态,调用update没有什么意义
   session.update(user);
   
   tx.commit();
   
  }catch(Exception e) {
   e.printStackTrace();
   if (tx != null) {
    tx.rollback();
   }
  }finally {
   HibernateUtils.closeSession(session);
  }
  //detached状态
 } 
 
 public void testSave3() {
  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("李四");
   
   tx.commit();
   
  }catch(Exception e) {
   e.printStackTrace();
   if (tx != null) {
    tx.rollback();
   }
  }finally {
   HibernateUtils.closeSession(session);
  }
  //detached状态,数据库中存在,但不被session管理
  user.setName("王五");
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   //通过session.update()方法将detached状态的对象重新纳入session管理
   //此时将变为persistent状态的对象
   //persistent状态的对象,在清理缓存是会和数据库同步
   session.update(user);
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 }

Session对象的几种方法:

Get方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/bf2b537f59707fc7ef714fc97160ea73.html