0
0

More than 3 years have passed since last update.

DynamoDB Enhanced Client にて、なぜかインデックステーブルに対してアクセスしてしまう

Posted at

エラー内容

エラー文は以下の通り。

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アノテーションで設定する場合は、メソッドの名称と引数の型を、フィールドと合わせる必要があります。
フィールドdateString型で定義されていますが、セッターではDate型を受け取ってしまっています。
Lombockの@Setterアノテーションで生成されるセッターとはシグネチャが異なるので共存可能であり、Foo#setDate(String)も定義されています。
しかし、テーブルのメタデータとしてはFoo#setDate(Date)が拾われてしまうようです。
そこからなぜか、インデックステーブルへアクセスしようとし、エラーが発生してしまうようですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0