[Original]Hibernate持久与游离

[Original]Hibernate持久与游离

        在Hbibernate中有自己的一套机制:FlushMode,它控制着持久化对象与数据库的关系。FlushMode有四种状态:NERVER、AUTO、COMMIT和ALWAYS。默认值为AUTO。Spring中使用Hibernate时,会将FlushMode初始化为AUTO,不过在使用OpenSessionInViewFilter(Spring有自己的一个transcation,不过它只是作用在service层,如果想使持久化对象保留到view层,那么启用这个过滤器之后就可以了)过滤器之后,Spring会将FlushMode设置为NERVER(表示持久化对象不在于数据库中数据实时关联)。不知道大家在工程中是否用到了spring提供的事务,在用到spring提供的HibernateTranscationManager管理事务时。当调用的方法位于该管理器之下时,spring会临时的将FlushMode修改为AUTO状态,这样如果你在view层有一个持久化对象,并且修改了这个持久化对象的状态,spring会自动将这个持久化对象的状态更新到数据库中去。这样可能会带来困惑:明明没有更新数据库,怎么数据库中的值发生改变了呢?其实这也是持久层的意义所在:持久是将数据保存在持久层中的对象上,并使对象与数据是一致的,如果持久化对象状态发生改变,成为了游离态,类似用jdbc取出Object之后close了connection,这样对象与数据库就脱离了,也就是游离。欢迎大家来拍砖^_^



你可能感兴趣的:([Original]Hibernate持久与游离)