私はDynamoDBを使用しています。enum
の代わりにのString
値を格納します。DynamoDBにenum値の代わりにJava enumのString値を格納します。
たとえば、私はこのenum
持っている:
public enum Source {
BREACH("breach"),
LEAKAGE("leakage");
private final String desc;
Source(String desc) { this.desc = desc; }
public String desc() { return desc; }
}
を...そして、この "実体":@DynamoDBTypeConvertedEnum
注釈付き
@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...
}
、保存されます値はBREACH
ですが、私欲しいのはbreach
です。
{
"AlertId": { "S": "a083168d-cb23-4ec8-ab80-a1c16955c4b8" },
"Source": { "S": "BREACH" },
...
"CreatedAt": { "S": "2017-05-03T14:07:36.395Z" }
}
手がかりはありますか?私は "コンバーター"を試してみましたが(完全には動作しませんでしたが)、それぞれが異なるので、enum
タイプごとに1つずつ行う必要があります。
nullを処理するようにgetTypeメソッドを更新しました。 – notionquest
私もそれを試しました。このアプローチの問題は、値を永続化する前に値が「null」だった場合です。エンティティをDynamoDBから「検索」しようとすると失敗します。時には 'source'が存在することもあればそうでないこともあります。値が常に存在する場合は問題はありませんが、それは私には当てはまりません。 –
getTypeメソッドの最新の更新は、Sourceがテーブルに存在しないシナリオを処理する必要があります。 DynamoDB getが機能し、オブジェクトを適切にデシリアライズする必要があります。 – notionquest