
- Hibernate 教程
- Hibernate - 首頁
- ORM - 概述
- Hibernate - 概述
- Hibernate - 架構
- Hibernate - 環境
- Hibernate - 配置
- Hibernate - 會話
- Hibernate - 持久化類
- Hibernate - 對映檔案
- Hibernate - 對映型別
- Hibernate - 示例
- Hibernate - 物件關係對映
- Hibernate - 級聯型別
- Hibernate - 註解
- Hibernate - 查詢語言
- Hibernate - Criteria 查詢
- Hibernate - 原生 SQL
- Hibernate - 快取
- Hibernate - 實體生命週期
- Hibernate - 批次處理
- Hibernate - 攔截器
- Hibernate - ID 生成器
- Hibernate - 儲存圖片
- Hibernate - log4j 整合
- Hibernate - Spring 整合
- Hibernate - Struts 2 整合
- Hibernate - Web 應用程式
- 對映表示例
- Hibernate - 基於層次結構的表
- Hibernate - 基於具體類的表
- Hibernate - 基於子類的表
- Hibernate 有用資源
- Hibernate - 問答
- Hibernate - 快速指南
- Hibernate - 有用資源
- Hibernate - 討論
Hibernate - 實體生命週期
在 Hibernate 中,實體是指對映到資料庫表的物件。實體可以處於四種狀態之一:
瞬時態 - 非持久態。剛剛例項化,或者可能呼叫了一些方法,但沒有與 Session 關聯。
持久態 - 與 Session 關聯。一旦我們呼叫 save 或 persist,物件就處於持久態。
脫管態 - 以前與 Session 關聯,但現在不再關聯。
刪除態 - 當實體被標記為從資料庫中刪除時,它進入刪除態。
讓我們詳細討論每種狀態。
瞬時態
瞬時態意味著實體是非持久態的。它只是被例項化,或者可能呼叫了一些方法,但沒有與 Session 關聯。物件可以透過呼叫 save、persist 或 saveOrUpdate() 方法進入 持久態。
示例
Employee employee = new Employee(); employee.setName("John Doe"); employee.setSalary(50000.0);
在上面的示例中,Employee 物件處於瞬時態,因為它尚未與 Hibernate 會話關聯。
持久態
持久態是指與會話的關聯。一旦我們呼叫 save 或 persist,物件就處於 持久態。當呼叫 delete() 方法時,持久物件可以變為 瞬時態。在 Session 上呼叫 get() 和 load() 返回一個持久實體。
示例
Session session = sessionFactory.openSession(); session.beginTransaction(); Employee employee = new Employee(); employee.setName("John Doe"); employee.setSalary(50000.0); session.save(employee); // The entity is now in the persistent //state session.getTransaction().commit(); session.close();
在這裡,Employee 物件在使用 session.save() 方法儲存時變為持久態。對員工物件所做的任何更改都將反映在資料庫中。
脫管態
脫管態是指實體以前與會話關聯,但現在不再關聯的狀態。當管理它的 Hibernate 會話關閉時,實體進入脫管態。在這種狀態下,實體不再與任何會話關聯,對其所做的更改不會自動與資料庫同步。
示例
Session session = sessionFactory.openSession(); session.beginTransaction(); Employee employee = session.get(Employee.class, 1L); session.getTransaction().commit(); session.close(); // The entity is now in the detached state employee.setSalary(60000.0); // Changes are not synchronized with the database
刪除態
當實體被標記為從資料庫中刪除時,它進入刪除態。在這種狀態下,實體仍然與會話關聯,但在事務提交時將從資料庫中刪除。
示例
Session session = sessionFactory.openSession(); session.beginTransaction(); Employee employee = session.get(Employee.class, 1L); session.delete(employee); // The entity is now in the removed state session.getTransaction().commit(); session.close();
狀態之間的轉換
實體可以透過各種 Hibernate 方法在這些狀態之間轉換:
瞬時態到持久態 - 呼叫 session.save() 或 session.persist() 方法,將實體從瞬時態移動到持久態。
持久態到脫管態 - 呼叫 session.evict() 或 session.clear() 或 session.close() 方法,會導致實體處於脫管態。
脫管態到持久態 - 呼叫 session.update() 或 session.merge() 方法來持久化脫管實體。
持久態到刪除態 - 透過呼叫 session.delete() 方法刪除實體。