hibernate 对象的4种状态

下面简单的介绍一下4种状态

临时状态(新建状态):刚用new语句创建,还没被实例化,并且不处于session的缓存中,处于临时状态的java对象被称为临时对象.

持久化状态:被加入到数据库中,也被加入到session缓存中,处于持久化的java对象被称为持久化对象.

游离状态:已经被持久化,但是不存在session缓存中,处于游离的java对象被称为游离对象.

删除状态:不处于数据库,更不处于session缓存中.

以下举例说明:

package com.zking.action;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.zking.entity.Mytest;

public class TestAction {

	    private Configuration con=null;
	    private SessionFactory sf=null;
	    private Session session=null;
	    private Transaction ta=null;
		
		
		@Before
		public void before() {
			//加载classpath下的hibernate.cfg.xml文件
			con=new Configuration().configure();
			//连接会话的工厂
			sf=con.buildSessionFactory();
			//创建session
			session=sf.openSession();
			//开启事务进行提交
			ta=session.beginTransaction();
			
		}
		
		
		
		@After
		public void after() {
			//关闭事务
			ta.commit();
			//关闭session
			session.close();
			//关闭工厂
			sf.close(); 
		}
		
		
		//改变session对象状态  无-临时-持久
		@Test
		public void newToLong() {
			Mytest t=new Mytest();
			t.setTid("23456789");
			t.setTname("优秀人");
			//不需要管主键的生成策略  不要认证
			session.save(t);
			//要管主键的生成策略  要认证 不然会报错
			//session.persist(t);
			 
			//从持久到游离 LongToFree
//			关闭之后-回收
//			session.close();
//			清空session对象 保留session  
//			session.evict(t);
//			重置session对象 保留session  
//			session.clear();
			
			//从游离到删除 FreeToDelete
//			session.delete(t);
		}
	 
		 
		
		
		//clear  从无到持久到游离 在到持久 在到删除
		@Test
		public void clear() {
			//实例化对象
			Mytest t=new Mytest();
			t.setTname("addzq");
			//保存增加的对象 持久
			session.save(t);
			//持久到游离 用clear 重置 清空session对象
			session.clear();
			//清空之后还可以改变状态  从游离到持久
			Mytest m=new Mytest();
			m.setTid("001");
			m.setTname("拜拜拜");
			session.saveOrUpdate(m);
			//从持久到删除
			session.delete(t);
			 
		}
		
		
		//懒加载  lazy="false"
		@Test
		public void load() {
			Mytest mt=session.load(Mytest.class, "001"); 
			System.out.println(mt);
			session.close();
			System.out.println(session);
			
		}
	 
}

简单的说四种状态的进行就是一个简单crud的实现过程里面session对象状态的改变(慢慢去琢磨,这是我理解的,如果是不太清楚的话,请谅解哈)
口语化举例一下:登录之前还没有对象->登录后有了user对象(用session user对象)->(赋予session对user管理权)session对象可以进行增删改查的操作 
1.增加就是从临时到持久
2.要想编辑一下session保存的对象(就要先清掉之前session里存的对象) 必须给session一个指示才能进行增加或修改操作 evict/clear(session不能关闭)  
3.然后改变对象就是从游离到持久 update/saveOrUpdate
4.删除状态就是:你增加的对象在数据库可以进行删除吧? 修改过的对象也可以进行删除吧? 所以持久和游离状态都可以进行删除 删除之后就进行回收
现在的话数据库表和session里面都没有这个对象了

附上总结图一张

猜你喜欢

转载自blog.csdn.net/qqqnzhky/article/details/82460503