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的内存模型。 删除的,是根表中的数据,当从任意根表都无法到达某一事实时,再自动把事实删除)。

我在想,以上想法是否可行。 假如大家有任何意见,或者有任何其他地方已经讨论过,请告诉我
:)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值