当前位置:  开发笔记 > 编程语言 > 正文

如何停止Java或Hibernate缓存

如何解决《如何停止Java或Hibernate缓存》经验,为你挑选了1个好方法。

我有一个应用程序从数据库中检索数据,我监视我的应用程序检索数据所需的时间.

但是当我使用相同的数据输入集来检索我的应用程序的数据时,我遇到了一个问题,第二次检索将花费更少的时间.

我假设Java或Hibernate有一些缓存或临时文件来保存数据,所以第二次运行会很快,但我不希望它发生.我需要监视它实际需要的时间,而不是从缓存或临时文件中检索的时间.

我试图禁止在Java控制面板中生成缓存和临时文件,我试图禁用hibernate缓存(第一级或第二级).但这些仍然无法解决我的问题.第二次运行仍然花费的时间少于应该花费的时间.

任何想法导致第二次运行更快的原因?它只是一个从DB检索数据的简单应用程序



1> boskoop..:

无法禁用 Hibernate第1级缓存(请参阅如何禁用hibernate缓存).如果要强制 Hibernate查询数据库,则需要了解Hibernate的会话缓存.

Lokesh Gupta有一个很好的教程http://toptodoinjava.com/2013/07/01/understanding-hibernate-first-level-cache-with-example/

    第一级缓存与"会话"对象相关联,应用程序中的其他会话对象无法看到它.

    缓存对象的范围是会话.会话关闭后,缓存的对象将永远消失.

    默认情况下启用一级缓存,您无法禁用它.

    当我们第一次查询实体时,它从数据库中检索并存储在与hibernate会话相关联的第一级缓存中.

    如果我们使用相同的会话对象再次查询同一个对象,它将从缓存加载,并且不会执行sql查询.

    可以使用evict()方法从会话中删除加载的实体. 如果已使用evict()方法删除该实体,则下一次加载此实体将再次进行数据库调用.

    可以使用clear()方法删除整个会话缓存.它将删除存储在缓存中的所有实体.

您应该使用evict()clear()方法强制查询数据库.

为了验证这一点,您可以使用hibernate.show_sql配置属性打开SQL输出(请参阅https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch03.html#configuration-optional) .

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有