HazelCast - 如何通过Map将记录插入到具有自动序列字段为PK

时间:2016-11-04 14:33:40

标签: hazelcast hazelcast-imap

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

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

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

我们非常欢迎您的观点。

谢谢, s.r.guruprasad

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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