hibernate -- hibernate笔记3
hibernate笔记3
2016年1月29日
9:34
关于session缓存
session对象与数据库交流:
flush方法:将session缓存中的对象内容保存到数据库中
reflesh方法:将session缓存中的对象的内容与数据库同步
clear方法:清除session缓存中的对象
关于以上三个方法–正常在提交事务的时候回调用flush方法将对对象的更新保存到数据库中,但可以人为的调用该方法进行保存;如果我们在操作对象时数据库内容发生了变化,则可以通过reflesh对象进行刷新;clear即是清除session缓存中的对象。
session中对象的状态:临时 持久化 托管 删除
get和load方法的区别:get是即时获得对象,load是延时获得对象(托管对象,如果不使用不会立即执行查询操作)。
如果在调用了这两个方法后就关闭session对象,load则会出现LazyInitializationException异常。
如果数据表中不存在该记录,get会返回一个null对象,而load会报异常。
可以在表的映射文件中的class标签中用lazy选项配置,它的默认值为true,也就是表示load会延迟,改成false后就不再延迟
save和persist的区别:save是为对象的id赋值,而在调用save方法前对对象ID的操作不会生效;如果是persist方法则会报异常。
saveOrUpdate方法:如果对象的id已经存在了,就执行update,如果不存在就执行save。
merge方法:当一个对象有id是当做游离对象处理,当该对象没有id是当做是临时对象处理,会根据id的生成策略来生成id,而这个方法比较特殊的地方在于,如果我们在关闭一个session之后有一个游离对象了,我们又在新的session里面试图获取第二个相同的对象并 持久化时,别的方法都会冲突,而merge会把后面一个的参数赋给前一个对象。
hibernate的三级缓存:
一级缓存:一级缓存的生命周期很短和session的生命周期一致,所以人们也把一级缓存叫做session缓存
作用;减少数据库的访问,从内存中取数据的速度要远高于从数据库中取数据,当我们去关闭session时,session会把缓存中所有的数据与数据库同步,这时session会把所有的sql语句合成一条对数据库进行访问。
支持session缓存的方法有:get(); load(); iterate();
已使用 Microsoft OneNote 2016 创建。