Session基本操作

evict\clear的使用:

User usr = (User)session.get(User.class, new Long(1));
session.close();

usr.setNickName("james");

Session session2 = HibernateSessionFactory.getSessionFactory().openSession();
session2.beginTransaction();
User usr2 = (User)session2.get(User.class, new Long(1));
session2.clear();//session2.evict(usr2);
System.out.println(session2.contains(usr2));
session2.update(usr);
usr2.setNickName("html");
session2.getTransaction().commit();
session2.close();

Session::evict(),Session::clear()方法都可以把一個persistent對象變成一個detached對象。在本例中因爲調用了evict纔可以持久化遊離態對象,否則因爲session2有一個usr2的persistent對象,調用update會引發異常。

lock的使用之一:
		User usr = (User)session.get(User.class, new Long(1));
session.close();

Session session2 = HibernateSessionFactory.getSessionFactory().openSession();
session2.beginTransaction();
session2.lock(usr, LockMode.NONE);//persistent
usr.setNickName("aga");//update
session2.getTransaction().commit();
session2.close();

利用lock使原本處於transient狀態的usr重新和session2相關聯,成爲persistent狀態。當然,一定要在persistent狀態之後更新usr才能生效。
發佈了14 篇原創文章 · 獲贊 0 · 訪問量 3645
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章