浏览 2812 次
锁定老帖子 主题:JVM的方式来管理数据的讨论
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-06-29
提要: 起初我一直不明白,为什么当一个持久态对象属性改变后,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的内存模型。 删除的,是根表中的数据,当从任意根表都无法到达某一事实时,再自动把事实删除)。 我在想,以上想法是否可行。 假如大家有任何意见,或者有任何其他地方已经讨论过,请告诉我 :) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2013-07-01
这个想法的应用场景是什么?相对于其他技术的优势何在?
另外,你这个思路,考虑过宕机的风险没有? |
|
返回顶楼 | |
发表时间:2013-07-05
只要有想法就是好的,但是这个玩意怎么转呢!
|
|
返回顶楼 | |