在ORM的上下文中,什么是透明持久性



我正在努力理解这个概念,但我在网上搜索的任何解释都太复杂或假设知识太多。有人能为我分解这个概念并简单地解释一下吗?

这意味着数据库被从应用程序中抽象出来,以至于"保存"到数据库的概念不会在最高级别上显示出来。

换句话说,您的应用程序将在业务对象上设置数据,并在下面的某个较低层中设置数据,这些数据将被自动保存。透明地。

从本质上讲,它是抽象的圣杯,将应用程序与数据库层分离。

ORM的真正的美是它提供的透明持久性,它可以让您编写简单的对象,并使它们只需很少的工作就可以持久化。要理解透明持久性是如何工作的,您必须理解以下概念。

第一个是一个名为PersistenceContext的概念。持久性上下文是ORM用来跟踪对象更改的地方,以便在以后将其持久化。持久性上下文中的每个对象都将具有以下状态之一:

  • newtransient:对象刚刚实例化,与持久性上下文无关。它在持久存储中没有持久表示
  • persistent:对象与持久性上下文相关联,并在持久性存储中具有表示形式
  • 分离:对象不再与持久性上下文关联(通常是因为持久性上下文已关闭)
  • 已删除:对象与持久性上下文相关联,但计划将其从持久性存储中删除

另一个重要的概念被称为通过可达性的持久性。它表示任何与持久对象相关的瞬态对象也将变为持久对象。

这两个概念的实现使得所谓的透明持久性成为可能。

让我们把这些放在java/jpa代码中:

EntityManager em=//获取EntityManger实例EntityTransaction tx=null;尝试{tx=em.getTransaction();tx.begin();Department dept1=em.find(Department.class,"department1");dept1.addEmployee(新员工("José",10503f));tx.commit();}catch(异常e){if(tx!=null){tx.rollback();}抛出新的RuntimeException(e);}最后{em.close();}

在线:

Department dept1=em.find(Department.class,"department1")

我正在从持久存储中获取部门部门1并联机:

dept1.addEmployee(新员工("José",10503f))

只需向其附加一名新员工。由于department1处于持久状态,通过可达性员工的瞬态实例(José)将持久化并附加到部门。

最新更新