【问题标题】:How do I annotate a dynamodb mapper with a secondary index?如何使用二级索引注释 dynamodb 映射器?
【发布时间】:2016-08-09 05:36:25
【问题描述】:

我正在尝试在 dynamodb 中设置订阅表来跟踪用户订阅的对象。

我有一个包含 2 个字符串属性、SubscriberID 和 UserID 的订阅表,并且会像这样设置(为简单起见使用名称):

[SubscriberID] ------ [UserID]

    Dave   ------ Steve

    Dave   ------ Josh

    Dave   ------ Cam

    Cam    ------ Dave

    Cam    ------ Justin

所以它会被解释为:Dave 订阅了 Steve、Josh 和 Cam。 Cam 订阅了 Dave 和 Justin.. 非常简单。

我有一个以 SubscriberID 作为分区键的主键,因此我可以查询用户的订阅。我还有一个名为“getSubscribers”的二级索引,它以 UserID 作为分区键,因此我可以查询用户的订阅者。

每次我尝试保存 dynamodb 映射器对象时,它都不会显示在我的订阅表中,但我的其他表只有 1 个主键输入正常。

我几乎可以肯定我的问题在于我的订阅者类上的注释,我尝试研究如何正确设置它,我想出的最好的就是这个

@DynamoDBTable(tableName = "starter-mobilehub-1604839252-Subscriptions ")
public class Subscription {

  private String SubscriberID;
  private String UserID;

  @DynamoDBHashKey(attributeName = "SubscriberID")
  public String getSubscriberID() {return SubscriberID;}
  public void setSubscriberID(String UserID) {this.SubscriberID = UserID;}

  @DynamoDBIndexHashKey(globalSecondaryIndexName = "getSubscribers", attributeName = "UserID")
  public String getUserID() {return UserID;}
  public void setUserID(String UserID) {this.UserID = UserID;}

}

我知道这可能是错误的,有人知道这些注释应该如何设置吗?任何帮助都会很棒。

【问题讨论】:

  • 您找到解决方案了吗?我的想法是基本上复制表定义并为每个表使用不同的哈希键,但是我不确定这是否可行,而且它似乎是一个 hacky 解决方案

标签: java amazon-web-services annotations amazon-dynamodb nosql


【解决方案1】:

我想通了。我删除了 GSI,但它仍然没有更新到表中。所以我在没有 GSI 的情况下删除并重新添加了它,它可以工作,然后添加 GSI,它仍然可以工作。

¯_(ツ)_/¯

【讨论】:

  • code sn-p,好吗?
猜你喜欢
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多