1

我正在使用 HazelCast 对 MS SQL 服务器数据库进行读/写操作。我有一个数据库表,其主键是自动增量列。当我的应用程序启动时,我将此表中的现有数据读取到地图中。Map 有一个底层的 MapStore 实现。地图的关键是自动递增列值。映射的值是一个包含表中几个字段的对象。

用户可以通过 HazelCast 层向该表中插入记录。此插入在事务中执行(TransactionalMap 是从 HazelCast 获得的)。

正是在这个地方我面临一个问题,因为我没有设置为 TransactionalMap 实例的主键值(自动增量值)。我在 MapStore 的 store() 方法中插入了数据库表逻辑,并且仅在事务上调用 commit 后才调用 store() 方法。我不知道如何首先将键值(自动增量值)设置到地图。可以在插入到表后获得自动增量值。

想法/观点是最受欢迎的。

谢谢, srguruprasad

4

2 回答 2

1

您可以PostProcessingMapStore在您的接口上实现接口,MapStore以便能够更新store()方法内存储的条目。您可以从数据库中获取自动生成的字段,然后您可以将这些更改反映到您的条目中。

请参阅后处理文档:http: //docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#post-processing-objects-in-map-store

于 2016-11-10T09:00:08.263 回答
0

我能看到的唯一方法是让您的代码将演示记录写入数据库,然后将其读回 Hz 并让 MapStore 进行更新而不是插入。当然,这会很慢而且很麻烦。

最好的解决方案是关闭自动增量,但您也可以使用不同的字段作为缓存键,例如有一个名为 cacheKey 的成员并将其存储在您的数据库记录中,当您在 MapStore 中进行插入时,您只需需要插入 where databaserecord.cachekey == cacheKey。

于 2016-11-07T18:52:35.987 回答