Java CQEngine是否支持事务更新?
我希望在一些底层资源的堆镜像上有一个可查询的对象。当使用索引不在我们控制之下的类(*)时,我们如何实现事务性更新(如果读卡器由于remove+add语义而丢失数据,那么并发性又有什么意义呢!) (*)Java CQEngine是否支持事务更新?,java,cqengine,Java,Cqengine,我希望在一些底层资源的堆镜像上有一个可查询的对象。当使用索引不在我们控制之下的类(*)时,我们如何实现事务性更新(如果读卡器由于remove+add语义而丢失数据,那么并发性又有什么意义呢!) (*)TransactionalIndexedCollection坚持破坏类型的equals方法,以便等效对象不再是equals() 此外,提供的equals方法涵盖“所有字段”而不是“主键字段”,因此会导致重复。如何使用我自己的PK创建一个原子可更新的集合?如果您想用于原子更新,您必须遵循它的指导,了解
TransactionalIndexedCollection
坚持破坏类型的equals
方法,以便等效对象不再是equals()
此外,提供的equals
方法涵盖“所有字段”而不是“主键字段”,因此会导致重复。如何使用我自己的PK创建一个原子可更新的集合?如果您想用于原子更新,您必须遵循它的指导,了解如何在存储在其中的对象上实现equals()
和hashCode()
但是,不需要将不直接控制的对象存储在索引集合中。例如,您可以编写一个将存储在集合中的包装器对象,这将根据指南实现equals()
和hashCode()
。这样,您就不需要修改不控制的对象
您可以编写属性,以便在给定包装器对象的情况下,它们实际上从内部对象读取字段或调用getter方法。Hi。在发布之前,我读了很多书,做了很多实验,我很尊重它,它做什么和不做什么都有很好的文档记录。我想这样可能会引起你的注意(-1:)!我没有使用包装器对象,因为它感觉像是CQE应该从我手中拿走的工作。我有几十个非常广泛和可变的对象,需要包装(代理?),所以这感觉不可伸缩或支持。如果发生更新(不是单独的add()或remove()),我目前正在使用StampedLock完全重做查询。