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 创建。