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)
}
}
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:

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.