java之hibernate之session中對象的生命週期

1. session是用來執行對象的crud操做,而且session是對象事務工廠。session是線程級別的,因此生命週期比較短。數據庫

2.session中對象的生命週期圖:session

3.session中對象的狀態ide

瞬時狀態spa

持久狀態線程

遊離狀態code

4.對象的生命週期一:對象

new---->瞬時狀態----->save------>持久狀態----->close----->遊離狀態blog

public class HibernateTest { @Test public void testSession1(){ Session session = null; Transaction tx = null; User user=null; try { //user處於瞬時狀態,session沒有管理該對象
            user = new User(); user.setName("小菜"); user.setAge(40); session = HibernateUtil.getSession(); //獲取事務
            tx = session.getTransaction(); //開啓事務
 tx.begin(); //被保存後 user處於持久狀態,session開始管理該對象 //處於持久狀態的數據 session會進行髒數據檢查
 session.save(user); user.setName("菜10"); //提交事務----提交事務後進行髒數據檢查後 會進行數據同步
 tx.commit(); } catch (Exception e) { if(tx!=null) tx.rollback(); }finally { HibernateUtil.close(); } //user處於遊離狀態 session無論理user
        System.out.println("user==="+user); } }
View Code

5.對象的生命週期二:
get---->直接進入持久化狀態---->clear------>遊離狀態------>update------->持久化狀態------->delete------->瞬時狀態生命週期

@Test public void testSession2(){ Session session = null; Transaction tx = null; User user=null; try { session = HibernateUtil.getSession(); //獲取事務
            tx = session.getTransaction(); //開啓事務
 tx.begin(); //直接從數據庫中獲取數據 數據處於持久狀態
            user = (User)session.get(User.class, 3); //清理session中的全部數據 user不被session管理 處於遊離狀態
 session.clear(); user.setName("衛斯理"); user.setAge(90); //執行更新操做後 user處於持久狀態
 session.update(user); //執行delete處於瞬時狀態
 session.delete(user); tx.commit(); } catch (Exception e) { if(tx!=null) tx.rollback(); }finally { HibernateUtil.close(); } //user處於瞬時狀態 session無論理user
        System.out.println("user==="+user); }
View Code

6.對象生命狀態總結事務

瞬時狀態:session中沒有,數據庫中也沒有

持久狀態:session中有,數據庫中也有

遊離狀態:session中沒有,數據庫中有

7.在執行對象的刪除和對象的更新時,應遵循對象的生命週期狀態圖,也就是應該先查詢後更新或刪除。

相關文章
相關標籤/搜索