脏数据检查策略一般有两种:
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();
......
}<