阅读https://apacheignite.readme.io/docs/affinity-collocation和ignite-examples中的文档,使用@AffinityKeyMapped的示例假定键是一个对象:PersonKey是一个具有personId和companyId的类,而companyId具有注释。
在我的用例中,我的键是一个简单的整数。我正在使用从WebConsole生成的域模型。我有2个类:Item和ItemInstance,ItemInstance有一个Item的外键引用。我的模型定义如下:
public class ItemInstance implements Serializable {
private static final long serialVersionUID = 0L;
@QuerySqlField(index = true)
@AffinityKeyMapped
private int itemId;
private String serialNumber;
...
}
public class Item implements Serializable {
private String name;
...
}
在节点启动和缓存加载期间没有错误,但在执行查询时我得到的结果不完整 - 它只检索并置的数据。我知道这一点,因为当我在Web控制台中运行相同的查询并勾选“允许非并置连接”时,我得到了完整的结果。
请注意,我没有像其他示例中那样使用AffinityKey
因为我正在读取第三方数据库,而没有执行任何put
。
请告诉我以下内容:
点击支持@AffinityKeyMapped在整数键上类似于我上面的用法;
我们是否需要在spring XML配置中定义@AffinityKeyMapped?我认为这可能是问题,但我无法在Web控制台中找到它,也无法在线找到它。
谢谢!
答案 0 :(得分:0)
亲和关键字值必须是关键对象的一部分。因此,如果使用co-location,则使用简单整数作为缓存键是不够的,因为您的密钥至少应包含唯一的对象ID和关联键。因此,您应该使用这两个字段创建一个对象,并使用注释标记后者。
如果您不想使用注释,或者没有类,则可以通过CacheKeyConfiguration
[1]提供关联键字段名称。但请注意,这仍然需要将复合对象用作键。
[1] https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheKeyConfiguration.html