首页 > 解决方案 > 为什么spring data dynamodb返回一个带有空元素的列表而不是一个空列表?

问题描述

当我调用在 dynamo 中进行键搜索的存储库方法时:

在此处输入图像描述

"{"TableName":"music","Key":{"artist":{"S":"Henrique"},"title":{"S":"Quinta_de_sol1"}},"ConsistentRead":false}"

这是 aws 输出:

"{}"

当我调用另一个使用 sortKey 进行查找的方法时:

在此处输入图像描述

这被发送到 aws:

"{"TableName":"music","ConsistentRead":true,"KeyConditions":{"artist":{"AttributeValueList":[{"S":"Djavan"}],"ComparisonOperator":"EQ"},"title":{"AttributeValueList":[{"S":"Tempo"}],"ComparisonOperator":"BEGINS_WITH"}},"ScanIndexForward":true}"

这是回报:

"{"Count":0,"Items":[],"ScannedCount":0}"

重现问题的步骤

使用名为 Music 的实体

@DynamoDBTable(tableName = "music")
data class Music(

        @get:DynamoDBHashKey(attributeName = "artist")
        var artist: String? = null,

        @get:DynamoDBRangeKey(attributeName = "title")
        var title: String? = null,

        var genre: String? = null
) {

    @Id
    private var id: MusicId? = null
        get() = MusicId(artist, title)
}

@DynamoDBDocument
data class MusicId(

        @field:DynamoDBHashKey(attributeName = "artist")
        var artist: String? = null,

        @field:DynamoDBRangeKey(attributeName = "title")
        var title: String? = null
) : Serializable

和一个存储库

interface MusicRepository : CrudRepository<Music, MusicId> {

    fun findByArtistAndTitle(artist: String, title: String): List<Music>

    fun findByArtistAndTitleStartingWith(artista: String, sortKey: String): List<Music>
}

当我调用时:

@PostConstruct
    fun init() {
        println(musicRepository.findByArtistAndTitleStartingWith("Djavan", "Eu te devoro").joinToString())
    }

规格

有人知道是否有一种干净的方法来保证 dynamo repo 永远不会返回一个只接受非空元素和空元素的列表?

标签: javaamazon-web-serviceskotlinspring-data-jpaamazon-dynamodb

解决方案


要编写调用 Amazon DynamoDB 的 Spring 应用程序,请考虑在 Spring 项目中使用官方 Amazon DynamoDB Java V2 API 和增强客户端。

映射 DynamoDB 表中的项目

如果您不熟悉 AWS SDK for Java V2,请参阅此快速入门


推荐阅读