Java Spring数据生成器-响应执行扫描而不是查询 预期行为

Java Spring数据生成器-响应执行扫描而不是查询 预期行为,java,spring-data,amazon-dynamodb,Java,Spring Data,Amazon Dynamodb,存储库对仅使用hashKey和rangeKey属性的方法执行查询,结果如下: "{"TableName":"music","KeyConditionExpression":"artist = :_artist and begins_with(title, :_title)","ExpressionAttributeValues":{":_artist":{"

存储库对仅使用hashKey和rangeKey属性的方法执行查询,结果如下:

"{"TableName":"music","KeyConditionExpression":"artist = :_artist and begins_with(title, :_title)","ExpressionAttributeValues":{":_artist":{"S":"Djavan"},":_title":{"S":"Eu te devoro"}}}"
"{"TableName":"music","ScanFilter":{"artist":{"AttributeValueList":[{"S":"Djavan"}],"ComparisonOperator":"EQ"},"title":{"AttributeValueList":[{"S":"Eu te devoro"}],"ComparisonOperator":"BEGINS_WITH"}}}"
实际行为 存储库对仅使用hashKey和rangeKey属性的方法执行扫描筛选,结果如下:

"{"TableName":"music","KeyConditionExpression":"artist = :_artist and begins_with(title, :_title)","ExpressionAttributeValues":{":_artist":{"S":"Djavan"},":_title":{"S":"Eu te devoro"}}}"
"{"TableName":"music","ScanFilter":{"artist":{"AttributeValueList":[{"S":"Djavan"}],"ComparisonOperator":"EQ"},"title":{"AttributeValueList":[{"S":"Eu te devoro"}],"ComparisonOperator":"BEGINS_WITH"}}}"
重现问题的步骤 使用名为Music的实体

@DynamoDBTable(tableName=“music”)
数据类音乐(
@字段:Id
@发电机
val id:MusicId=MusicId(),
变量类型:字符串?=null
) {
@DynamoDBHashKey(attributeName=“艺术家”)
fun getArtist()=id.artist
乐趣集艺术家(艺术家:字符串){
艺术家
}
@DynamoDBHashKey(attributeName=“title”)
fun getTitle()=id.title
乐趣集标题(标题:字符串){
id.title=标题
}
}
@动态文档
数据类MusicId(
@字段:DynamoDBHashKey(attributeName=“artist”)
变量艺术家:字符串?=null,
@字段:DynamoDBRangeKey(attributeName=“title”)
变量标题:字符串?=null
):可序列化
还有一个存储库

@EnableScan//我知道,如果我删除此注释,将不允许启用,但问题是实现代码不将我的方法识别为键查询,如果我删除此注释,则该方法将被调用
界面音乐积淀:积淀积淀{
有趣的findByArtistAndTitleStartingWith(artista:String,sortKey:String):列表
}
当我调用:

@PostConstruct
fun init(){
println(musicRepository.findbyartists和titlestartingwith(“Djavan”,“Eu te devoro”).joinToString())
}
日志显示是我打电话给AWS的,正如我上面显示的

规格
  • 库:
  • Spring Data DynamoDB版本:5.2.5
  • Spring数据版本:未使用
  • Spring Boot Starter Web版本:2.3.4.0版本
  • AWS SDK版本:1.11.573
  • Java版本:11
  • 平台详细信息:Windows


我做错什么了吗?或者,另一种方法是spring数据在尝试对实体进行随机更改后创建对aws的正确查询。我在repository方法中得到了预期的结果

使用复合键映射实体的正确方法

@DynamoDBTable(tableName=“music”)
数据类音乐(
@获取:DynamoDBHashKey(attributeName=“artist”)
变量艺术家:字符串?=null,
@获取:DynamoDBRangeKey(attributeName=“title”)
变量标题:字符串?=null,
变量类型:字符串?=null
) {
@身份证
私有变量id:MusicId?=null
get()=MusicId(艺术家、头衔)
}
@动态文档
数据类MusicId(
@字段:DynamoDBHashKey(attributeName=“artist”)
变量艺术家:字符串?=null,
@字段:DynamoDBRangeKey(attributeName=“title”)
变量标题:字符串?=null
):可序列化
更改实体并调用后:

musicRepository.FindByartists和TitleStartingwith(“Djavan”、“Eu te devoro”)
我得到了AWSAPI的正确调用

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