DynamoDBecondaryPartitionkey Annotation in AWS SDK V2 Ignoriert in KotlinJava

Java-Forum
Anonymous
 DynamoDBecondaryPartitionkey Annotation in AWS SDK V2 Ignoriert in Kotlin

Post by Anonymous »

Verwenden von Spring Boot, DynamodbenhancedAsyncClient aus dem V2 AWS Java SDK und DynamoDB, das mit TestContainers und Localstack ausgeführt wird, kann ich keine Tabelle vom Client mit einem Sekundärindex abrufen, wie in meiner Dynamo DB -Bean -Datenklasse angegeben. Alles in Kotlin geschrieben. < /P>
Bean: < /p>

Code: Select all

@DynamoDbBean
data class MyEntity (
@get:DynamoDbPartitionKey
@get:DynamoDbAttribute("entityId")
var entityId: String = "",

@get:DynamoDbAttribute("customerId")
@get:DynamoDbSecondaryPartitionKey(indexNames = ["CustomerIdIndex"])
val customerId: String = "",

@get:DynamoDbSecondarySortKey(indexNames = ["CustomerIdIndex"])
@get:DynamoDbAttribute("createdAt")
val createdAt: LocalDateTime = LocalDateTime.now()
) {
companion object {
val tableName: String = "my-entity"
}
< /code>
Abfrage -Implementierung: < /p>
@Repository
class MyEntityRepository(client: DynamoDbEnhancedAsyncClient) {
companion object {
private val tableSchema = TableSchema.fromBean(MyEntity::class.java)
private val tableName = MyEntity::class.java.simpleName
}

private val table = client.table(tableName, tableSchema)

override suspend fun findByCustomerId(customerId: String): Flow {
val conditional: QueryConditional = QueryConditional.keyEqualTo(
Key.builder()
.partitionValue(customerId)
.build()
)

val request = QueryEnhancedRequest.builder()
.queryConditional(conditional)
.scanIndexForward(false)
.build()

val queryPublisher: SdkPublisher
> = table
.index("CustomerIdIndex")
.query(request)
}
}
Die Abfrage des primären Partitionsschlüssels funktioniert. Wenn der obige Code jedoch versucht, die GSI abzufragen, erhalte ich die Fehlermeldung:

Versuch, eine Operation auszuführen, die einen sekundären Index erfordert, ohne den Index zu definieren Attribute in den Tabellenmetadaten. Indexname: CustomerIdIndex
java.lang.IllegalArgumentException: Versuch, einen Vorgang auszuführen, der einen sekundären Index erfordert, ohne die Indexattribute in den Tabellenmetadaten zu definieren. Indexname: CustomerIdIndex
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticTableMetadata.getIndex(StaticTableMetadata.java:150)

Wenn ich den Code debugge und mir die Tabellenvariable ansehe, kann ich tatsächlich erkennen, dass der DynamoDB-Client den Sekundärindex nicht erfasst hat, wie gezeigt hier:
Image

Es scheint mir also, dass die Anmerkungen in der Bean-Datenklasse für den Sekundärindex nicht berücksichtigt werden. Es fällt mir schwer, den Grund dafür zu finden.
Ich freue mich über jeden Input, vielen Dank.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post