【问题标题】:Hibernate with EHCache - Save on any non-cached entity it putting it in Cache使用 EHCache 休眠 - 保存在将其放入缓存中的任何非缓存实体上
【发布时间】:2011-07-15 16:55:36
【问题描述】:

我正在尝试使用带有 EHCache 的 Hibernate 的二级缓存。我在应用程序中配置了一些用@Cache 标记的实体,我看到 EHCache 正确使用了它们。

但是我观察到的是,当我保存/更新任何其他不应该缓存的实体时;我看到它被 put() 方法添加到缓存中。数据的检索不会将非缓存对象放入缓存中。

这种行为对我来说似乎不正确,因为我们应该只将缓存的对象添加到缓存中,而不是保存/更新操作中的任何对象。

我错过了什么吗?

当我执行任何保存/更新操作时,我看到在日志中添加的实体。

2011-07-15 22:02:28 调试 [http-0.0.0.0-8080-1] EhcacheGeneralDataRegion.put(83) |键:mmd_addresses 值:5368822204260352 2011-07-15 22:02:28 调试 [http-0.0.0.0-8080-1] EhcacheGeneralDataRegion.put(83) |键:fqng_users 值:5368822205923328 2011-07-15 22:02:29 调试 [http-0.0.0.0-8080-1] EhcacheGeneralDataRegion.put(83) |键:fqng_link_user_applications 值:5368822209306624 2011-07-15 22:02:30 调试 [http-0.0.0.0-8080-1] EhcacheGeneralDataRegion.put(83) |键:mmd_addresses 值:5368821964824576 2011-07-15 22:02:30 调试 [http-0.0.0.0-8080-1] EhcacheGeneralDataRegion.put(83) |键:fqng_users 值:5368821964824576 2011-07-15 22:02:30 调试 [http-0.0.0.0-8080-1] EhcacheGeneralDataRegion.put(83) |键:fqng_link_user_applications 值:5368821964824576 2011-07-15 22:05:55 调试 [http-0.0.0.0-8080-6] EhcacheGeneralDataRegion.put(83) |键:fqng_users 值:5368823053987840

这些对象都没有@Cache 注释。

@Entity 
@Table(name = "fqng_users", uniqueConstraints = @UniqueConstraint(columnNames = "NAME")) 
// @Audited 
public class Users implements java.io.Serializable { 

@Entity 
@org.hibernate.annotations.Entity(dynamicUpdate = true) 
@Table(name = "mmd_addresses") 
// @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 
public class Addresses implements java.io.Serializable { 

【问题讨论】:

    标签: hibernate ehcache


    【解决方案1】:

    嗯..问题在于将查询缓存与 org.hibernate.cache.UpdateTimestampsCache 一起使用。需要一些时间来研究 Hibernate 代码库。

    当使用StandardQueryCache时; Hibernate 在 UpdateTimestampsCache 中为每个表保存最新更新的时间戳,以便知道上次更新表的时间。这有助于我们跟踪查询缓存中的任何实体是否在跟踪查询结果后更新。

    由于 Hibernate 无法跟踪确切的实体,它会将所有实体添加到已保存/更新的 UpdateTimestampsCache。所以本质上,我看到的 put() 实际上是将实体类型(特别是表)放在 UpdateTimestampsCache 中,并在插入/更新相同类型的实体时使它们无效并替换为新值通过休眠。

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 2010-11-26
      • 2015-04-27
      • 1970-01-01
      • 2018-05-22
      • 2016-08-13
      • 2011-05-03
      • 1970-01-01
      相关资源
      最近更新 更多