• 初学hibernate之缓存


    一、1、Session级别缓存属于一级缓存,持久化对象保存在Session一级缓存中(一级缓存引用持久化对象地址),只要session不关闭,一级缓存就存在,缓存中对象也不会被回收;

    Session会在一些特定时间点,将缓存中数据flush到数据库中( Transaction的commit()、应用程序执行一些查询操作、调用session的flush方法)。

    2、SessionFactory级别缓存属于二级缓存

    二、证明一级缓存存在:在获取Customer的Demo中,可以使用同一个Session获取两次Customer,如:

    Customer c1=session.get(Customer.class,1);//这时c1是持久化状态,c1存储在session中(一级缓存);

    System.out.println(c1.getName());

    Customer c2=session.get(Customer.class,1);//可验证c2获取值时并未向数据库发送SQL语句,而且c1值和c2值相同

    System.out.println(c2.getName());

    三、hibernate快照

    Hibernate快照可以让持久化对象具有自动更新能力。

    如在执行customer查询操作时Customer c1=session.get(Customer.class,1);如果取到的c1对象Name为”tom“,然后c1.setName("fox");然后提交事务并关闭session。数据库查询customer数据,id为1的记录name值更改为fox。这是快照让对象有了自动更新能力。

    Hibernate向一级缓存放入数据时,同事保存快照数据(数据备份),当修改一级缓存数据,在flush操作时,对比缓存和快照,如果不一致自动更新(将缓存数据同步到数据库,并更新快照)

    四、一级缓存常见操作:

    1、flush,用于刷新一级缓存,使快照区数据和缓存数据一致,在没有提交数据库执行前,数据库数据没有改变

    2、clear,清空一级缓存中所有对象

    3、evict,清空一级缓存中指定对象

    4、refresh,使用数据库数据同步一级缓存与快照(重新查数据库,更新快照和一级缓存)

  • 相关阅读:
    AHP
    常用积分公式
    关于纸张尺寸和照片尺寸
    学历学位知多少?
    C++ 类型转换的实现
    CDDIS网站下 GNSS 相关的数据产品下载+命名方式解读+文件格式说明文件下载地址
    windows 获取pc信息
    shell 数组操作
    net use远程重启服务器
    获取邮箱使用情况、以及最后一次logon时间
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/4734766.html
Copyright © 2020-2023  润新知