📜  休眠生命周期

📅  最后修改于: 2022-05-13 01:54:51.261000             🧑  作者: Mango

休眠生命周期

在这里我们将了解 Hibernate Lifecycle 或者换句话说,我们可以说我们将了解 Hibernate 中实体/对象类的映射实例的生命周期。在 Hibernate 中,我们可以创建实体的新对象并将其存储到数据库中,也可以从数据库中获取实体的现有数据。这些实体与生命周期相连,实体的每个对象都经过生命周期的各个阶段。

Hibernate Lifecycle 主要有四种状态:

  1. 瞬态
  2. 持久状态
  3. 分离状态
  4. 移除状态

休眠生命周期

正如上述媒体所描绘的那样,人们可以将它们的绘制方式联系起来,以便在我们的脑海中更好地绘制。现在我们将讨论状态以更好地解释休眠生命周期。如下:

状态 1:瞬态

瞬态是实体对象的第一个状态。当我们使用 new运算符实例化 POJO 类的对象时,该对象处于瞬态状态。此对象不与任何休眠会话连接。由于它没有连接到任何 Hibernate Session,所以这个状态没有连接到任何数据库表。因此,如果我们对 POJO 类的数据进行任何更改,则不会更改数据库表。瞬态对象独立于Hibernate,存在于堆内存中



将新对象更改为瞬态

有两种布局会发生瞬态,如下所示:

  1. 当对象由应用程序生成但未连接到任何会话时。
  2. 对象由关闭的会话生成。

在这里,我们为 Employee 类创建一个新对象。下面是显示 Employee 对象初始化的代码:

//Here, The object arrives in the transient state.
Employee e = new Employee();   
e.setId(21);  
e.setFirstName("Neha");  
e.setMiddleName("Shri");  
e.setLastName("Rudra");

状态 2:持久状态

一旦对象与休眠会话连接,对象就会进入持久状态。因此,有两种方法可以将 Transient State 转换为 Persistent State :

  1. 使用休眠会话,将实体对象保存到数据库表中。
  2. 使用休眠会话,将实体对象加载到数据库表中。

在这种状态下。每个对象代表数据库表中的一行。因此,如果我们对数据进行任何更改,那么 hibernate 将检测这些更改并在数据库表中进行更改。

将瞬态状态转换为持久状态

以下是为持久状态给出的方法:

  • session.persist(e);
  • session.save(e);
  • session.saveOrUpdate(e);
  • session.update(e);
  • session.merge(e);
  • session.lock(e);

例子:

// Transient State
Employee e = new Employee("Neha Shri Rudra", 21, 180103); 


//Persistent State
session.save(e);

状态 3:分离状态



要将对象从持久状态转换为分离状态,我们要么必须关闭会话,要么必须清除其缓存。由于会话在此处关闭或缓存被清除,因此对数据所做的任何更改都不会影响数据库表。每当需要时,分离的对象可以重新连接到新的休眠会话。要将分离的对象重新连接到新的休眠会话,我们将使用以下方法:

  • 合并()
  • 更新()
  • 加载()
  • 刷新()
  • 节省()
  • 更新()

以下是用于分离状态的方法:

  • session.detach(e);
  • session.evict(e);
  • session.clear();
  • session.close();

将持久状态转换为分离状态

例子

// Transient State
Employee e = new Employee("Neha Shri Rudra", 21, 180103);

// Persitent State 
session.save(e); 


// Detached State
session.close(); 

状态 4:移除状态

在休眠生命周期中,它是最后一个状态。在移除状态下,当实体对象从数据库中删除时,实体对象被称为处于移除状态。它是通过调用delete() 操作来完成的。由于实体对象处于已移除状态,因此对数据进行任何更改都不会影响数据库表。

将持久状态转换为已移除状态

例子

// Java Pseudo code to Illustrate Remove State
 
// Transient State
Employee e = new Employee();     
Session s = sessionfactory.openSession();
e.setId(01);


// Persistent State
session.save(e)  

// Removed State                 
session.delete(e);