エラー内容
エラー文は以下の通り。
java.lang.IllegalArgumentException: A sort key value was supplied for an index that does not support one. Index: $PRIMARY_INDEX
結論
属性に対するゲッター・セッターの定義がおかしい。(敗北N回目、、、)
対処
適切なゲッター・セッターを設定しましょう。
具体的には以下の2点をチェック。
- メソッド名
- 引数の型
発生状況
筆者の場合は以下のような形で発生しました。
@DynamoDbBean
@Setter
public class Foo {
private String name;
private String date;
@DynamoDbAttribute("name")
public String getName() {
return name;
}
@DynamoDbAttribute("date")
public String getDate() {
return date;
}
public setDate(Date date) {
this.date = new SimpleDateFormat("yyyy-MM-dd").format(date);
}
}
原因はFoo#setDate(Date)
ですね。
テーブルのメタデータにはゲッターとセッターを設定する必要があります。
@DynamoDbAttribute
アノテーションで設定する場合は、メソッドの名称と引数の型を、フィールドと合わせる必要があります。
フィールドdate
はString型
で定義されていますが、セッターではDate型
を受け取ってしまっています。
Lombockの@Setter
アノテーションで生成されるセッターとはシグネチャが異なるので共存可能であり、Foo#setDate(String)
も定義されています。
しかし、テーブルのメタデータとしてはFoo#setDate(Date)
が拾われてしまうようです。
そこからなぜか、インデックステーブルへアクセスしようとし、エラーが発生してしまうようですね。