【发布时间】: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