首页 > 解决方案 > CQEngine 是否支持事务更新?

问题描述

我希望有一些底层资源的可查询堆上镜像。当使用CQEngine索引不受我们控制的类 (*) 时,我们如何实现事务更新(如果读取器由于删除+添加语义而丢失数据,那么所有这些并发的意义何在!)。

(*)TransactionalIndexedCollection坚持破坏类型的equals方法,以使等效对象不再存在equals()

此外,提供的equals方法涵盖“所有字段”而不是“pk 字段”,因此会导致重复。如何使用自己的 PK 创建可原子更新的集合?

标签: javacqengine

解决方案


如果您想使用TransactionalIndexedCollection进行原子更新,则必须遵循其关于如何实现equals()以及hashCode()将存储在其中的对象的指导。

但是,您不需要将不直接控制的对象存储在索引集合中。例如,您可以编写一个包装器对象,将其存储在集合中 - 这将equals()根据hashCode()指导实施。这样您就不需要修改您无法控制的对象。

您可以编写属性,以便给定包装对象,它们实际上读取字段或从内部对象调用 getter 方法。


推荐阅读