Hibernate一级缓存

1.三种查询方式:

1.1.HQL语句:批量查询时,查询结果会进入缓存中。(先查询list,再查询单条记录,只打印一条语句),HQL不会使用一级缓存。(重复的查询,结果只打印一条SQL)

  1.2.SQL查询:如果把查询结果封装到对象中,对象会放入到一级缓存中,如果没有将查询结果放到对象中,不会放到一级缓存中

  1.3.criteria查询:会将查询结果放入到一级缓冲中,但是查询不会使用一级缓存(与HQL查询的结论相似)

2.缓存中的数据与数据库中的不同步,会优先使用缓存中的。

使用JDBC,在一级缓存中出现该问题的几率比较小。

一级缓存的生命周期:opeansession,一级缓存生命周期开始,session.close();一级缓存销毁

3.其他的API(了解)

  3.1evict将缓存中的对象删除

3.2clear清空1级缓存

   3.3refresh 刷新,强制刷新缓冲的对象(可以解决缓存不同步的问题),调用方法时会发送一个sql语句给数据库

   3.4flush对比快照,并提交缓存对象。

    User u1=(User)session.get(User.class,1l);
    u1.setName("zhangsan");
    session.flush();  //同步,执行update语句

  3.5自然主键=>assigned

    update 与saveorUpdate 方法

saveorUpdate,可以同时完成保存或者更新操作

     主键为空=》报错,无id

       主键有值=》存在update,不存在insert方法

  3.6错误  

  User  u=(User)session.get(User.class,1);  //持久化状态
  session.evict(u);                                     //游离状态,缓冲中不存在
  User u2=(User)session.get(User.class,1);  //持久化状态,缓存中存在
  session.update(u);                                    //持久化状态,缓存中存在

  //结果会报错;因为内存当中不存在两个相同的id对应值的对象放入到一级缓存.        

4.Hibernate中的关系

        一对多:customer 和订单(多的一方外键)   

    Customer类:private Set<Order> orders = new HashSet<Order>();
     Order    类: private Customer customer = new Customer();

      映射文件:

    多对多 :老师和学生(建立中间表)

        

      一对一:人和身份证

      (主键同步(即是主键又是外键),任意一方添加主键)

  

  

  

时间: 2024-08-02 02:51:44

Hibernate一级缓存的相关文章

hibernate 一级缓存和二级缓存

hibernate一级缓存:session缓存即事务级缓存,session关闭,缓存自动销毁,开发人员不用管理,由hibernate管理,save.update.saveoOrUpdate.lock.load.list会自动向一级缓存中存放数据,get,load,list会自动从一级缓存中取数据,可调用evict(Object object)和clear()清除缓存. hibernate二级缓存:sessionFactory缓存即进程级别缓存,由缓存插件实现,如OSCache,对hibernat

(10)Hibernate一级缓存

1.为什么要用缓存? 目的:减少对数据库的访问次数!从而提升hibernate的执行效率! 2.Hibernate中缓存分类 一级缓存.二级缓存 3.一级缓存的概念 1)Hibenate中一级缓存,也叫做session的缓存,它可以在session范围内减少数据库的访问次数!  只在session范围有效! Session关闭,一级缓存失效! 2)当调用session的save/saveOrUpdate/get/load/list/iterator方法的时候,都会把对象放入session的缓存中

转载 hibernate一级缓存和二级缓存的区别

文章来源:http://blog.csdn.net/defonds/article/details/2308972     hibernate一级缓存和二级缓存的区别 缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据. 缓存的介质一般是内存,所以读写速度很快.但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质.

Hibernate一级缓存(补)

------------------siwuxie095 什么是缓存 缓存是介于应用程序和永久性数据存储源(如:硬盘上的文件 或 数据库) 之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提 高应用的运行性能 针对数据库,则: 数据是存到数据库中的,而数据库本身也是文件系统,使用流方式操作文 件的效率并不是很高 如果把数据存到内存里面,不需要使用流方式,就可以直接读取内存中的 数据,提高读取的效率 Hibernate 缓存 1.Hibernate 框架中提供了很多优化方式,Hibe

hibernate一级缓存,二级缓存和查询缓存

一级缓存 (必定存在)  session里共享缓存,伴随session的生命周期存在和消亡: 1. load查询实体支持一级缓存 2. get查询实体对象也支持 3. save保存的实体对象会缓存在一级缓存 4. clear evict会清除session缓存 5. save巨大数据,每20个数据,一般flush执行sql将数据持久化然后clear缓存,防止内存溢出,save放最后. 6. iterate使用一级缓存(creatQuery中的查询实体对象list会使用一级缓存,查询对象实体属性不

hibernate 一级缓存

一级缓存 为什么要用缓存? 目的:减少对数据库的访问次数!从而提升hibernate的执行效率! Hibernate中缓存分类: 一级缓存 二级缓存 概念 1)Hibenate中一级缓存,也叫做session的缓存,它可以在session范围内减少数据库的访问次数!  只在session范围有效! Session关闭,一级缓存失效! 2)当调用session的save/saveOrUpdate/get/load/list/iterator方法的时候,都会把对象放入session的缓存中. 3)S

[转] Hibernate一级缓存、二级缓存

缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据. 缓存的介质一般是内存,所以读写速度很快.但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质.缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期. hibernate的缓存包括Session的缓存和SessionFactory的缓

hibernate一级缓存和二级缓存的区别

缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据. 缓存的介质一般是内存,所以读写速度很快.但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质.缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期. Hibernate的缓存包括Session的缓存和SessionFactory的缓

Hibernate一级缓存和二级缓存深度比较

1.什么是缓存 缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据. 缓存的介质一般是内存,所以读写速度很快.但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质.缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期. Hibernate的一级缓存是内置的,不能被卸载. Hiberna

Hibernate一级缓存和二级缓存具体解释

一.一级缓存二级缓存的概念解释 (1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中.假设短时间内这个 session(一定要同一个session)又做了同一个操作.那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据: (2)二级缓存就是SessionFactory级别的缓存,顾名思义.就是查询的时候会把查询结果缓存到二级缓存中,假设同一个sessionFactory 创建的某个session运行了同样的操作,hib