我正在开发一个Android应用程序,它的目的是每周创建一个DynamoDB表。我得到了当前的周数:
Time time = new Time();
time.setToNow();
curweekNumb = time.getWeekNumber();
所以我想将表名修改为:
Constants.TEST_TABLE_NAME = "Week_" + currentweekNumb;
每当currentweekNumb值改变时。
Constants类:
public class Constants {
public static String TEST_TABLE_NAME = "Week_1";
}
这里的主要问题是,我收到一个错误,表明注释属性DynamoDBTable.tableName的值必须是常量表达式。所以它需要一个" final"字符串值作为tableName。在这种情况下,我无法在应用程序的任何位置更改该值。是否无法动态更改应用程序中的表名?
@DynamoDBTable(tableName = Constants.TEST_TABLE_NAME) <--- The error is on this line
public static class UserPreference {
private int Tid;
private String Mandag;
@DynamoDBHashKey(attributeName = "Tid")
public int getTid() {
return Tid;
}
public void setTid(int Tid) {
this.Tid = Tid;
}
@DynamoDBAttribute(attributeName = "Mandag")
public String getMandag() {
return Mandag;
}
public void setMandag(String Mandag) {
this.Mandag = Mandag;
}
}
答案 0 :(得分:1)
虽然@ lesto的回答是有效的,但我不建议每周制作一张ew表。从长远来看,它可能无法扩展。 DynamoDB每个区域的每个帐户限制为256个表,因此最终您将遇到它。见https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html#limits-tables
我建议您创建一个以星期作为分区的分区键。
答案 1 :(得分:0)
在编译时对注释进行了编辑,因此您无法使它们变为动态。 但你可以绕过它们;
UserPreference userTable = ..
String tableName = .. // Get table name
dynamoMapper.save(userTable, new DynamoDBMapperConfig(new TableNameOverride(tableName)));
你甚至可以使用表格列表但是你必须使用batchWrite()
而不是save()