下面簡單的介紹一下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裏面都沒有這個對象了
附上總結圖一張