文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Hibernate中sessoin的flush学习笔记

Hibernate中sessoin的flush学习笔记

时间:2010-10-09  来源:lxy_em30

 一、session flush方法主要做了两件事:

1、清理缓存; 2、执行sql。   二、session在什么情况下执行flush 1、 默认在事务提交时; 2、 显示的调用flush。   三、当主键生成方式不同时,flush调用的时刻也不同。 1、当主键的生成方式是uuid时: 调用完save()后,只是将save的对象纳入到了session的管理,不会发出insert语句,但是id已经生成,session中existsInDatebase状态为false(也就是说,此时数据库中并不存在所save的对象);如果此时调用session.flush()方法,那么Hibernate会清除缓存,执行相关的sql语句,则此时数据已经在数据库中存在了,且如果数据库的隔离级别设置成“未提交读”时,我们应该可以在数据库中读到相关的数据记录(此时的数据仍然可以“回滚”),显然,session中existsInDatebase状态将更改为true;如果transaction.commit()方法被调用,在默认会调用session.flush()方法,同时,此时数据库中的数据不能“回滚”。 2、当主键的生成方式为native时: 调用完save()后,将save的对象纳入到了session的管理,发出insert语句,并返回有数据库生成的id,修改了session中existsInDatebase状态为true,如果数据库的隔离级别设置为为提交读,那么我们可以看到save过的数据,这种情况下,显示的调用session.flush()方法,已经显的多余了,因为在后面的transaction.commit()方法被调用时,会隐式的调用session.flush()方法。 3、当主键的生成方式为assigned时: 调用完save()后,将save的对象纳入到了session的管理,不会发出insert语句,而此时的主键已经由我们手动分配了,于是,显示的调用session.flush()方法,能起到主键生成方式为uuid时的效果。   四、我需要注意的是:hibernate默认是按照save(insert),update、delete顺序提交相关操作的,所以,如果我们想要按照自己的意愿去进行相关的操作,那么我们可以用显示的调用session.flush()来实现我们的愿望。
相关阅读 更多 +
排行榜 更多 +
方块枪战战场安卓版

方块枪战战场安卓版

飞行射击 下载
战斗火力射击安卓版

战斗火力射击安卓版

飞行射击 下载
空中防御战安卓版

空中防御战安卓版

飞行射击 下载