私は、thisライブラリを使用して、SpringブートとAmazon DynamoDBで作業しています。Amazon DynamoDBとクラス階層
@DynamoDBTable(tableName = "EventLogs")
abstract class AbstractEventLogEntry implements Serializable {
private static final long serialVersionUID = 7713867887326010287L;
@DynamoDBHashKey(attributeName = "EventId")
private String eventId;
@DynamoDBAttribute(attributeName = "GeneratedAt")
@DynamoDBMarshalling(marshallerClass = ZonedDateTimeMarshaller.class)
private ZonedDateTime generatedAt;
AbstractEventLogEntry() {
eventId = new UUID().value();
generatedAt = ZonedDateTime.now();
}
/* Getters/Setter */
}
...別のクラス:
public abstract class EventLogEntry extends AbstractEventLogEntry {
private static final long serialVersionUID = 1638093418868197192L;
@DynamoDBAttribute(attributeName = "UserId")
private String userId;
@DynamoDBAttribute(attributeName = "EventName")
private String eventName;
protected EventLogEntry(AdminEvent event) {
userId = event.getUserName();
eventName = event.getClass().getSimpleName();
}
protected EventLogEntry(UserEvent event) {
userId = event.getUserId();
eventName = event.getClass().getSimpleName();
}
/* Getters/Setter */
}
...他1:
public class AdminEventLogEntry extends EventLogEntry {
private static final long serialVersionUID = 1953428576998278984L;
public AdminEventLogEntry(AdminEvent event) {
super(event);
}
}
...そして最後の1:
問題は、このクラス階層でありますpublic class UserEventLogEntry extends EventLogEntry {
private static final long serialVersionUID = 6845335344191463717L;
public UserEventLogEntry(UserEvent event) {
super(event);
}
}
典型的なクラス階層です。それが動作するキー
com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: no key(s) present on class io.shido.events.domain.AdminEventLogEntry
とすぐに私は(再び)を宣言として:今、私は、共通リポジトリ使っAdminEventLogEntry
とUserEventLogEntry
を保存しようとしている:
@EnableScan
public interface EventLogEntryRepository extends DynamoDBCrudRepository<EventLogEntry, String> {
// ...
}
を...そしてそれは常に私に語りました:
@DynamoDBHashKey(attributeName = "EventId")
private String eventId;
私の質問は次のとおりです。階層間で共通する可能性のあるすべてのフィールドを再宣言する必要がありますか?親からのHashKey
を認識していないようです。
手がかりはありますか?
この解決策をお探しですか? –
はい!そして、それはかなり素晴らしい(今のところ)ように働いています。私はそれを投稿します。 –