在Hibernate架构中,持久化对象是什么意思?

40
Hibernate是一个持久化框架,用于将Java环境中的数据持久化到数据库中。
我很困惑...如果我们将对象持久化到数据库中,那么为什么Hibernate架构在下面的图片中将持久化对象描绘在应用程序和Hibernate之间的中间层呢? a busy cat (来源: viralpatel.net)
7个回答

37

我会使它更加清晰。 持久化对象是您创建的POJO类的实例,表示数据库中表中的行。 根据hibernate-doc,表示数据库中表的POJO类实例经历了3个状态之一是持久状态。

当POJO实例在会话范围内时,它被认为是持久的,即当我们关闭或刷新会话时,Hibernate检测到对该对象所做的任何更改并将其与数据库同步。

至于hibernate.properties和XML映射@Ken Chan是正确的,请查看hibernate-doc以获取有关Hibernate中对象的更多说明。


33

首先,您需要了解Hibernate对象的三种状态,即瞬态、持久态和游离态。

瞬态:如果一个对象只是使用new操作符实例化,并且数据库中没有它的引用,那么它就处于瞬态。

持久态:如果一个对象在数据库中有某些引用,并且已经分配了标识符值,那么它就处于持久态。如果对该对象进行任何更改,则Hibernate将检测到这些更改,并且该数据库中的效果将存在于该对象之上,因此称为持久态。这些更改是在会话关闭时进行的。持久对象处于会话范围内。

游离态:一种已经持久化但不再处于会话范围内的对象。Hibernate将无法检测到对此对象所做的任何更改。它可以重新连接到会话以使其再次持久化。


1
这应该是被接受的答案。非常好的解释,非常简单易懂。 - Asma Rahim Ali Jafri

8
根据图示,您可以配置hibernate.properties 或一些 XML映射 来将数据库表映射到一个称为persistent object的Java对象上。
接下来,在您的application中,您可以像操作普通的Java对象一样操纵persistent object的状态。您可以将persistent object传递给Hibernate,Hibernate将生成并发出必要的SQL语句到数据库以同步persistent object及其对应的数据库记录的状态。
这样描述是否通俗易懂呢?

是的,但是 Hibernate 缓存会发生什么?当会话关闭时,持久对象是否保存在数据库中?@ken Chan - Mohammad Asgari
2
在Hibernate的术语中,当Hibernate会话被“flushed”时,持久化对象将与数据库进行同步(即根据持久化对象的状态从数据库中保存/更新/删除)。 - Ken Chan

6

持久化对象通常是指那些即使在创建它的进程结束后仍然存在于内存中的对象。这些对象随后被存储在数据库中。


5

持久化对象只是POJO类的一个实例。而POJO类只是表示表的类。Hibernate始终监视持久对象。无论您何时操作该对象或对其进行任何更改,Hibernate都会在该表中执行相同的操作(由POJO类表示)。这一切都由Hibernate处理。因此,总体来说,这是Hibernate框架的一个特性。


2
持久化对象是程序中具有数据库表示的类。
例如,如果您有一个汽车类,具有属性NumberPlate、Fuel,NHibernate配置将将其映射到数据库中名为Car的表中,并具有与Car类属性对应的这些列。

这个解释更清晰了,因为你提供了例子。谢谢。 - Dulani Maheshi

0
持久化对象是一个与数据库表相对应的Java类对象。 如果您在数据库中有一个名为EMP的表,其中包含nameagesalary列。那么您可以创建一个Java类,其中包含数据字段nameagesalary以及它们的gettersetter方法,用于这3个字段。 具有与数据库表相对应的类的对象称为持久化对象
在下面给出的图表中:

enter image description here

Java应用程序将拥有“POJO”类,该类将拥有“Persistent Objects”,然后“Hibernate”框架将使用“hibernate.properties”和“XML Mapping”分别知道DB连接和对象<->表映射来将这些对象持久化到数据库中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接