孙卫琴 <<精通Hibernate>>一书中对Session的save()方法有如下说明:
"save()方法并不立即执行SQL insert语句. 只有当Session清理缓存时才会执行SQL insert语句."那么试问, 如下代码为何正常执行?//将session清理缓存模式改为never, 也就是在commit时, 不清理缓存, 既然没清理缓存那么为什么SQL insert执行成功了呢?
Session sessin = SessionFactory.getSession();
Transaction tx = session.beginTransaction();
session.setFlushMode(FlushMode.NEVER);
User user = new User();
session.save(user);
tx.commit();
session.close();
"save()方法并不立即执行SQL insert语句. 只有当Session清理缓存时才会执行SQL insert语句."那么试问, 如下代码为何正常执行?//将session清理缓存模式改为never, 也就是在commit时, 不清理缓存, 既然没清理缓存那么为什么SQL insert执行成功了呢?
Session sessin = SessionFactory.getSession();
Transaction tx = session.beginTransaction();
session.setFlushMode(FlushMode.NEVER);
User user = new User();
session.save(user);
tx.commit();
session.close();
"save()方法并不立即执行SQL insert语句. 只有当Session清理缓存时才会执行SQL insert语句."那么试问, 如下代码为何正常执行?//将session清理缓存模式改为never, 也就是在commit时, 不清理缓存, 既然没清理缓存那么为什么SQL insert执行成功了呢?恩。。那个书上说的没错。我不知道你理解了清理缓存的意义没有。其实就是当你调用Save()方法的时候,把事物提交后它就会执行成功了,往数据库中插入记录的。而正在当你执行时,它会把该条记录和缓存中的记录做比对,如果比对不成功,恩,就会生成相应的SQL语句了。如果比对成功,就不会生成SQL语句了。恩。还有,就是调用事物提交的方法时,是会先去调用清理缓存的方法的。为的就是清理缓存时,把缓存中的数据和数据库做比对。
也就是说下列代码 没有执行清理缓存的操作 但是却能成功的向数据插入数据 可是孙卫琴说"save()方法并不立即执行SQL insert语句. 只有当Session清理缓存时才会执行SQL insert语句." 那么既然我没清理缓存 那为什么会执行sql呢 难道说commit也有很flush一样的作用?Session sessin = SessionFactory.getSession();
Transaction tx = session.beginTransaction();
session.setFlushMode(FlushMode.NEVER);
User user = new User();
session.save(user);
tx.commit();
session.close();