JVM的方式来管理数据的讨论

首先,我不知道该题目是否是我想表达的内容。我希望在下面的可以表达清楚

提要:
起初我一直不明白,为什么当一个持久态对象属性改变后,Hibernate会,或者说要 自动将其与数据库同步,而不要求我们用调用session.save方法
后来,我想:假如这个PO不是持久化到数据库中,而是到某个List中。 修改po的属性,当然会修改List中对象的属性。而Hibernate这样处理,就让人感觉好像你的po就是保持到某个集合中一样。

假如这是Hibernate的设计理念,那的确是个很好的想法。
但JVM的内存模型和数据库最大的区别就在于删除。 对于JAVA而言。 你无法直接把某个对象删除掉、因为它是由根引用决定的。 而数据库不同,我们可以把表中的记录移除。


假设我们有对象A和对象B, A持有B对象引用。

JAVA:
我们把A实例保存于A集合,B对象保存于B集合。 假设这2个集合一直有根引用存在。
那么当我们从B集合取出B,并改变它属性时,自然改变结果会被直接保存(一样)。
但是,当我们从B集合删B时,B这个实例其实依旧存在,虽然它已经被从B集合中删除。

Hibernate:
我们把A实例保存于A表,B对象保存于B表。 A表有一个字段放B的id。 假设删除外键约束。
那么当我们从B集合取出B,并改变它属性时,自然改变结果会被直接保存(一样)。
但是,当我们从B集合删B时,B就被删除了。 而A持有的引用也许会被删除(有inverse),也许不会。 但这和内存模型已经不同,因为B已经不在了。

很多时候,我们会为对象来做假删除,因为任何数据都是宝贵的。 但我在想,是否可以设计一种表结构(有根表和事实表)。 让ORM框架,完全模拟JVM的内存模型。 删除的,是根表中的数据,当从任意根表都无法到达某一事实时,再自动把事实删除)。

我在想,以上想法是否可行。 假如大家有任何意见,或者有任何其他地方已经讨论过,请告诉我
:)

猜你喜欢

转载自markxia.iteye.com/blog/1896421