阅读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
。
你能告诉我以下内容吗:
谢谢!
亲和关键值必须是关键对象的一部分。因此,如果使用co-location,则使用简单整数作为缓存键是不够的,因为您的密钥至少应包含唯一的对象ID和关联键。因此,您应该使用这两个字段创建一个对象,并使用注释标记后者。
如果您不想使用注释,或者没有类,则可以通过CacheKeyConfiguration
[1]提供关联键字段名称。但请注意,这仍然需要将复合对象用作键。
[1] https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheKeyConfiguration.html