首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache作为Hibernate L2缓存存储重复实体

Apache作为Hibernate L2缓存存储重复实体
EN

Stack Overflow用户
提问于 2016-06-30 20:02:06
回答 1查看 596关注 0票数 3

环境:

  • 运行MySQL 5.6的流浪者
  • Java 1.8
  • Hibernate 4.2.16最后
  • Apache Ignite 1.6

设置:

  • 具有字符串id和On/Off状态枚举的实体ToggleSwitch
  • 等于()和hashcode()都是针对id实现的
  • @Cache使用READ_WRITE和默认区域
  • 读取节点执行EM.find()并每秒钟显示一次当前状态
  • 编写节点执行EM.find()并每3秒切换一次状态
  • 配置了事务原子性、分区缓存模式和FULL_SYNC写同步模式的两个节点。
  • 使用TcpDiscoverySharedFsIpFinder进行发现

因此,我遇到的问题是,读者永远不会从写作方面获取更改。我已经使用IgniteInternalCache.entrySet()转储了缓存的内容(与状态相同的频率),它用相同的键显示了缓存中的两个ToggleSwitch实例。

我尝试将它们添加到缓存密钥集中,以查看是否会产生相同的结果,但它的作用与预期一样,只存储一个实例。

我不知道这是怎么回事,有什么想法吗?是错误还是配置错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-30 20:43:25

最有可能的是,equals和/或hashCode为密钥实现的不正确。我会将这两个键与它们的内容一起存储在缓存中,并尝试调用这些方法来检查它们是否一致。

--更新--

在使用默认二进制封送拆收器时,也可能在多应用程序环境中发生此问题。这里有更多详细信息:https://issues.apache.org/jira/browse/IGNITE-3429

作为解决办法,您可以从默认的二进制序列化切换到OptimizedMarhsaller (请参阅下面的配置示例)。这将迫使关键对象在服务器端反序列化,并正确应用自定义equals逻辑。

代码语言:javascript
复制
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="marshaller">
        <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller"/>
    </property>
</bean>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38132263

复制
相关文章

相似问题

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