您的位置:首页 > 其它

hibernate识别脏数据策略

2013-02-18 17:51 134 查看
脏数据检查策略一般有两种:

1. 数据对象监控

数据对象监控的实现方式,大体上是通过拦截器对数据对象的设置方法(setter)进行拦截,拦截器的实现可以借助Dynamic Proxy或CGlib实现。一旦数据对象的设置方法被调用(通常这也就意味着数据对象的内容发生变化),则将其标志为“待更新”状态,之后在数据库操作时将其更新到对应的数据表。

2. 数据版本比对

在持久层框架中维持数据对象 的最近读取版本,当数据提交时将提交数据与此版本进行比对,如果 发生变化 则将其同步到数据库相应的库表。

hibernate 使用的是第二种策略。

实例:

TUser user = (TUser)session.load(TUser.class,new Integer(1));

Transaction tx = session.beginTransaction();

user.setName("111");

tx.commit();

1. 加载

2.启动事务

3.设值

4.提交;

提交事件随即调用Session.flush:

public void commit() throws HibernateException{

......

if(session.getFlushMode() != FlushMode.NEVER)

session.flush();

......

}

Sesson.flush()方法中,会完成两个主要任务:

public void flush() throws HibernateException{

......

flushEverything();//刷新所有数据

execute();//执行数据库SQL完成持久化操作

......

}

flushEverything会首先完成 一些预处理工作(如调用对应的interceptor、协同级联关系等);之后,即调用flushEntities方法对当前Session中的实体对象进行刷新,而这个过程也是脏数据判定的关键。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: