我想创建一个通用的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是必填且非null。我可以将其设置为无效的表名(例如,在名称中使用特殊字符),但这是一个非常棘手的解决方案
使用
Schema
作为接口实际上是行不通的*。主要缺陷是@DynamoDBHashKey
和其他字段注释不会被继承。*我实际上没有尝试过使用界面
最佳答案
保存没有@DynamoDBTable批注的SecondTable时,您会有什么期望?
如果目标是使用表名,建议您进入TableNameResolver。