Hibernate_6_session的管理

session的管理:

1)save():把臨時狀態變爲持久化狀態(交給Sessioin管理)

Session session = sessionFactory.openSession();
	session.beginTransaction();
	// --------------------------------------------

	User user = new User(); // 臨時狀態
	user.setName("test");
	session.save(user); // 變爲了持久化狀態

	// --------------------------------------------
	session.getTransaction().commit();
	session.close();

	user.setName("李四"); // 遊離狀態
	System.out.println(user.getName()); // 遊離狀態

2update():把遊離狀態變爲持久化狀態

     在更新時,對象不存在就報錯

 session.clear(); // 清除Session中所有的對象
 session.evict(user); // 清除Session中一個指定的對象

3saveOrUpdate():把臨時或遊離狀態轉爲持久化狀態

  在更新時,對象不存在就報錯

  本方法是根據id判斷對象是什麼狀態的:如果id爲原始值(對象的是null,  

  原始類型數字是0)就是臨時狀態,如果不是原始值就是遊離狀態。

User user = new User();
 user.setId(3); // 自己生成一個遊離狀態對象
 user.setName("newName");

 session.saveOrUpdate(user);//持久化對象

4)delete():把持久化或遊離轉爲刪除狀態

  如果刪除的對象不存在,就會拋異常

5get():獲取數據,是持久化狀態

   會生成:select ... where id=?

  會馬上執行sql語句

  如果數據不存在,就返回null

6load():獲取數據,是持久化狀態

   load()後返回的是一個代理對象,要求類不能是final的,否則不能生成子

   類代理,就不能使用懶加載功能了。

   讓懶加載失效的方式:

   一、把實體寫成final的;

   二、在hbm.xml中寫<class ... lazy="false">

     不會馬上執行sql語句,而是在第1次使用非idclass屬性時執行sql

     如果數據不存在,就拋異常:ObjectNotFoundException

 

7)操作大量數據,要防止Session中對象過多而內存溢出

for (int i = 0; i < 30; i++) {
		User user = new User();
		user.setName("測試");
		session.save(user);

		if (i % 10 == 0) {
			session.flush(); // 先刷出
			session.clear(); // 再清空
		}
	}

  user = (User) session.get(User.class, 5); // 持久化
  // 刷新Session緩存中對象的狀態,即重新select一下
  上session.refresh(user); 





         

   





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章