首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要明确hibernate二级缓存

需要明确hibernate二级缓存
EN

Stack Overflow用户
提问于 2012-10-22 17:51:24
回答 2查看 1.5K关注 0票数 6

我需要一些关于Hibernate二级缓存的说明。

  1. hibernate二级缓存是如何工作的?
  2. 它是否从在Java环境中启动的服务器上的实体类中存在@Cacheable注释的表中加载所有数据?
  3. 当对这些表进行更新时,缓存会同步吗?
  4. 最后一个问题是,当我感兴趣的某个表上有更新时,我的DAO代码有什么方法可以得到通知?(寻找任何能够密切关注表更新的侦听器)。
EN

回答 2

Stack Overflow用户

发布于 2012-10-22 18:55:23

  1. hibernate二级缓存是如何工作的? 当您的实体被标记为可缓存时,如果您已经配置了第二级缓存,那么hibernate将在第一次读取之后将该实体缓存到第二级缓存。 Hibernate提供了根据hibernates规范插件任何缓存实现的灵活性。有关二级缓存和配置选项的详细信息,请参阅冬眠手册
  2. 它是否从在Java环境中启动的服务器上的实体类中存在@Cacheable注释的表中加载所有数据? 我不认为有任何配置来实现这一点。间接地,您可以通过在启动时读取整个表来实现这一点,这会对系统启动时间产生不利影响。(我不喜欢这个)。如果实体是外部修改的,那么hibernate无法同步它,您将得到陈旧的数据。
  3. 当对这些表进行更新时,缓存会同步吗? 表更新后,缓存不会立即更新。随后对获取更新记录的调用将转到数据库,hibernate通过使用会话时间戳在内部实现这一点。
  4. 最后一个问题是,当我感兴趣的某个表上有更新时,我的DAO代码有什么方法可以得到通知?(寻找任何能够密切关注表更新的侦听器)。 不,hibernate不支持这个。
票数 2
EN

Stack Overflow用户

发布于 2012-10-22 18:46:29

  1. 这是一个过于宽泛的问题,不能在这里回答。
  2. 不是的。它懒洋洋地填充缓存。每次您使用hibernate API或查询从数据库中获得一个可访问的实体时,该实体都存储在缓存中。稍后,当使用缓存中实体的ID调用session.get()时,不需要数据库查询。
  3. 如果更新是通过Hibernate完成的,那么缓存将被更新。如果是使用外部应用程序或SQL查询,甚至是批量更新HQL查询完成的,则缓存不知道更新。这就是为什么你需要小心那些实体,你选择了哪些生存时间,等等。有时,返回陈腐的值是没有问题的,有时它是不可接受的。
  4. 不是的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13016916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档