我正在使用DynamoDB,並且我想要存儲enum
的String
值而不是enum
本身。在DynamoDB中存儲Java枚舉的字符串值而不是枚舉值本身
舉例來說,我有這個enum
:
public enum Source {
BREACH("breach"),
LEAKAGE("leakage");
private final String desc;
Source(String desc) { this.desc = desc; }
public String desc() { return desc; }
}
......而這個 「實體」:
@DynamoDBTable(tableName = "Alerts")
public final class Alert implements Serializable {
private static final long serialVersionUID = 4012517315640518044L;
@DynamoDBHashKey(attributeName = "AlertId") // Partition Key or Hash Attribute
private String alertId;
@DynamoDBTypeConvertedEnum
@DynamoDBAttribute(attributeName = "Source")
private Source type;
// Constructor(s), Getter(s), Setter(s), ToString, etc...
}
隨着@DynamoDBTypeConvertedEnum
註解,即會保存爲BREACH
的價值,但我想要breach
。
{
"AlertId": { "S": "a083168d-cb23-4ec8-ab80-a1c16955c4b8" },
"Source": { "S": "BREACH" },
...
"CreatedAt": { "S": "2017-05-03T14:07:36.395Z" }
}
任何線索?我確實嘗試過「轉換器」(不完全,我不能使它工作,但我認爲我必須最終爲每個enum
類型做一個,因爲它們都是不同的。
我已經更新了getType方法來處理null。 – notionquest
我也試過,這種方法的問題是在持久化之前值爲'null'時。當它試圖從DynamoDB中「查找」實體時會失敗。有時'源'可以存在或不存在。如果價值總是沒有問題,但對我來說並非如此。 –
getType方法的最新更新應處理Source不在表上的場景。 DynamoDB get應該工作,並且對象應該正確地反序列化。 – notionquest