下面简单的介绍一下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里面都没有这个对象了
附上总结图一张