• hibernate即时获取数据库信息


    由于读取数据的时候,Hibernate将第一次读取的内容放到了缓存中,若此时有别的应用修改了数据库中的数据,程序再次读取的时候,内容是从缓存中直接获取,无法反映数据库中的最新状况。

    因此,可以设置读取数据的模式,不用读取缓存,从数据库中直接读取,方法如下:

    public List queryObjectsByHQL(String hql, boolean queryFromCache) throws HibernateException
    {
    Session session = getSession();
    List list = null;

    try
    {
    Query query = session.createQuery(hql);

    //设置成CacheMode.IGNORE模式,在读取数据的时候,不和缓存交换数据,直接读取数据库。

    //该方法仅仅修改本次会话的查询模式
    if (!queryFromCache)
    {
    query.setCacheMode(CacheMode.IGNORE);
    }
    list = query.list();
    }
    catch (Exception e)
    {
    System.out.println("查询失败:" + e.getMessage());
    }
    finally
    {
    session.close();
    }

    return list;
    }

    hibernate读取数据库缓存问题

    Hibernate采用二级缓存策略,其工作过程如下:

    1) 条件查询的时候,总是发出一条select * from table_name where ….,一次获得所有的数据对象。
    2) 把获得的所有数据对象根据ID放入到第二级缓存中。
    3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。

    4) 删除、更新、增加数据的时候,同时更新缓存。

    由于Hibernate是根据ID在两级缓存中先进行搜索,当插入或删除时ID有所改变,故所读的数据能及时更新,而更新数据库后由于相同的ID在缓存中仍能找到,因此再次读出时要把两级缓存关闭。具体步骤为:

    1)dao.getSession().clear();//先清除一级缓存

    2)query.setCacheMode(CacheMode.IGNORE); //关闭二级缓存

  • 相关阅读:
    div布局的几点体会
    DIV高度的问题
    想修改CSS
    如何在EXCEL SHEET中 动态添加控件
    div的背景设置的问题
    CSS的资源
    远程调试
    Javascript跨域访问解决方案 Leone
    再谈PHP开发者常犯的10个MySQL错误 Leone
    开发人员需要熟知的常用Linux命令之八:Version、Kernel查看 Leone
  • 原文地址:https://www.cnblogs.com/shz365/p/3790880.html
Copyright © 2020-2023  润新知