【问题标题】:Force override of DynamoDB table name强制覆盖 DynamoDB 表名
【发布时间】:2015-02-06 11:30:03
【问题描述】:

我想创建一个通用的 DynamoDB 模式,该模式应由多个 DynamoDb 表类共享:

@DynamoDBTable(tableName = "please_dont_create_me!")
public abstract class Schema {
  @DynamoDBHashKey
  private String id;

  private String value;

  /* setters and getters .. */
}


@DynamoDBTable(tableName = "table_1")
public class FirstTable extends Schema {
}


// Woops, I forgot to annotate with @DynamoDBTable
public class SecondTable extends Schema {

}

保存FirstTable 的实例按预期工作:

FirstTable ft = new FirstTable();
ft.setId("occupation");
ft.setValue("artist");
mapper.save(ft);  // Saves (occupation, artist) to 'table_1'

现在保存SecondTable,我忘了用@DynamoDBTable注释:

SecondTable st = new SecondTable();
st.setId("hobby");
st.setValue("drawing");
mapper.save(st);  // Saves (hobby, drawing) to 'please_dont_create_me!'

是否可以通过创建Schema 的方式来避免这种情况?

我的想法:

  • Schema 必须用@DynamoDBTable 注释,否则它定义的字段不会被拾取(例如,当尝试保存 FirstTable 时,会抛出关于缺少 hashKey 的异常)
  • tableName 是必需的且非空。我可以将其设置为无效的表名(例如,在名称中使用特殊字符)但是.. 这是一个非常 hacky 的解决方案
  • Schema 用作接口实际上不会起作用*。主要缺陷是@DynamoDBHashKey等字段注解没有被继承。

*我还没有真正尝试过使用接口

【问题讨论】:

    标签: java inheritance annotations amazon-dynamodb prototypal-inheritance


    【解决方案1】:

    在不使用 @DynamoDBTable 注释的情况下保存 SecondTable 时,您期望什么?

    如果目标是使用表名,我建议您深入了解TableNameResolver

    【讨论】:

      【解决方案2】:

      您希望使用相同的 pojo 类使您的表选择动态化。我就是这样做的。

      AmazonDynamoDBClient client = new AmazonDynamoDBClient();
      DynamoDBMapper mapper = new DynamoDBMapper(client);
      client.setEndpoint("http://localhost:8000/");
      String tableName="User";
      User user = new User(); 
      user.setName("Ohelig");
      TableNameOverride config = new DynamoDBMapperConfig.TableNameOverride(tableName);
      mapper.save(user, new DynamoDBMapperConfig(config));
      

      【讨论】:

        猜你喜欢
        • 2017-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-11
        • 1970-01-01
        相关资源
        最近更新 更多