gpt4 book ai didi

java - 强制覆盖 DynamoDB 表名称

转载 作者:行者123 更新时间:2023-11-30 03:34:12 25 4
gpt4 key购买 nike

我想创建一个通用 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 作为接口(interface)实际上是行不通的*。主要缺陷是 @DynamoDBHashKey 和其他字段注释未继承。

*我实际上还没有尝试过使用界面

最佳答案

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

如果目标是使用表名称,我建议您深入研究 TableNameResolver .

关于java - 强制覆盖 DynamoDB 表名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com