2017-07-30 8 views
1

だから、this postを見て、this other postを見ました。具体的な問題は次のとおりです。DynamoDBMappingException:ハッシュキーのマッピングがありません。明確にマップしたにもかかわらず、

私は、単一のパーティションキー "serverName"を持つ "server"という単純なDynamoDBテーブルを持っています。ここでは表が説明だ:

"table":{ 
    "attributeDefinitions":[{ 
     "attributeName":"serverName","attributeType":"S" 
    }], 
    "tableName":"server", 
    "keySchema":[{ 
     "attributeName":"serverName","keyType":"HASH" 
    }], 
    "tableStatus":"ACTIVE", 
    "creationDateTime":"Jul 29, 2017 12:46:36 PM", 
    "provisionedThroughput":{ 
     "numberOfDecreasesToday":0, 
     "readCapacityUnits":5, 
     "writeCapacityUnits":5 
    } 
} 

私はこのように、Javaのテーブルの定義を持っている:

@DynamoDBTable(tableName="server") 
public static class Server { 
    private String serverName; 
    private Room[] rooms; 

    Server() {} 

    Server(String serverName) { 
     this.serverName = serverName; 
     this.setRooms(); 
    } 

    @DynamoDBHashKey(attributeName="serverName") 
    String getServerName() { 
     return serverName; 
    } 
    void setServerName(String serverName) { 
     this.serverName = serverName; 
    } 
    . 
    . 
    . 
} 

あなたは、私が「serverNameの」のHASH属性を持っていることを説明し、私のテーブル内の定義で見ることができますJavaでは@DynamoDBHashKey(attributeName="serverName")があります。

は、誰かが...私はまだなっだ、なぜ私が把握助けることができ

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: Server; no mapping for HASH key 
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel.hashKey(DynamoDBMapperTableModel.java:119) ~[aws-java-sdk-dynamodb-1.11.105.jar!/:na] 
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel$Builder.build(DynamoDBMapperTableModel.java:449) ~[aws-java-sdk-dynamodb-1.11.105.jar!/:na] 
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$StandardTableFactory.getTable(StandardModelFactories.java:107) ~[aws-java-sdk-dynamodb-1.11.105.jar!/:na] 
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.getTableModel(DynamoDBMapper.java:393) ~[aws-java-sdk-dynamodb-1.11.105.jar!/:na] 
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.load(DynamoDBMapper.java:431) ~[aws-java-sdk-dynamodb-1.11.105.jar!/:na] 
    at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.load(AbstractDynamoDBMapper.java:80) ~[aws-java-sdk-dynamodb-1.11.105.jar!/:na] 
    at com.animationlibationstudios.channel.inventory.persist.dynamodb.ServerDynamoRepository.readServer(ServerDynamoRepository.java:110) ~[classes!/:na] 
    at com.animationlibationstudios.channel.inventory.persist.dynamodb.ServerDynamoRepository.readServer(ServerDynamoRepository.java:26) ~[classes!/:na] 

(私はJDK 8とcom.amazonaws使用していますPS:AWS-javaの-SDK-DynamoDBの:1.11 0.105)

+1

あなたが「getServerName」のために異なるアクセス修飾子を設定する必要があります。ここでは

はそれを行う方法です。私の更新された答えを見てください。 –

答えて

2

UPDATE

あなたの "getServerName" 方法が公開されていないとDynamoDBMapperはそれにつまずきます。それは公開するとそれが動作するはずです:

@DynamoDBHashKey(attributeName="serverName") 
public String getServerName() { 
    return serverName; 
} 

ORIGINAL ANSWER:

あなたは同じタイプのパーティションキーとして「サーバー名」が適切なパーティションキーの定義を持つテーブルを作成したことを確認します。

DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDB); 
CreateTableRequest createTableRequest = dynamoDBMapper.generateCreateTableRequest(itemClass); 
// Set your throughput here 
createTableRequest.withProvisionedThroughput(new ProvisionedThroughput(1L, 1L)); 

dynamoDB.createTable(createTableRequest); 
+0

あなたの言うように私が作成したものではないことを表に記載しましたか?プログラムではなくAWSコンソールを使用して作成されましたが、記述が自分のコードで読み込まれ、テーブルが存在し、読み込めるようになりました。ハッシュのマッピングがないという不満があります。 – RobA

+1

私は見ていますが、このエラーの原因の1つは、テーブルの構造とドメインクラスの不一致の可能性があります。あなたのパーティションキーに同じキー名、同じキータイプ、同じデータタイプがあるかどうかを確認する私の提案。 –

+0

ああ、いいえ!素人移動!私の防衛では、IntelliJは "有益に"、私は方法をパッケージプライベートにすることを提案したが。私は現在、IllegalStateExceptionに頭を悩ませている:接続プールがシャットダウン...しかし、元のエラーが処理されます。おかげさまで、@ivan – RobA

関連する問題