DynamoDB在两个自动生成属性的情况下不获取所有条目



我有一个使用DynamoDb的crud应用程序,它有一个包含两个自动生成属性的模型类,一个用于主键,另一个用于时间戳。我使用DynamoDbMapper的scan()函数从数据库中获取条目,但低于错误。

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: expected N in value {S: 2022-12-09T09:23:52.737Z,}

员工

@Data
@AllArgsConstructor
@NoArgsConstructor
@DynamoDBTable(tableName = "employee")
public class Employee {
@DynamoDBHashKey
@DynamoDBAutoGeneratedKey
private String employeeId;
@DynamoDBAttribute
private String firstName;
@DynamoDBAttribute
private String lastName;
@DynamoDBAttribute
private String email;
@DynamoDBAttribute
private Department department;
@DynamoDBAutoGeneratedTimestamp(strategy = DynamoDBAutoGenerateStrategy.ALWAYS)
private Long timestamp;
}

DynamoDbConfiguration

package com.dailycodebuffer.config;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DynamoDbConfiguration {
@Bean
public DynamoDBMapper dynamoDBMapper() {
return new DynamoDBMapper(buildAmazonDynamoDB());
}
private AmazonDynamoDB buildAmazonDynamoDB() {
return AmazonDynamoDBClientBuilder
.standard()
.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration(
"endpoint",
"region"
)
)
.withCredentials(
new AWSStaticCredentialsProvider(
new BasicAWSCredentials(
"access_key",
"secret_key"
)
)
)
.build();
}
}

方法获取条目

public List<Employee> getAllEmployees() {
return dynamoDBMapper.scan(Employee.class, new DynamoDBScanExpression());
}

DynamoDb dependency:

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-dynamodb</artifactId>
<version>1.11.857</version>
</dependency>

注意:如果我删除时间戳,getAll工作得很好。

我是新的DynamoDb,任何帮助将不胜感激。

我要在这一个随机猜测,但我相信问题是,你有一个项目(或几个)已经存储了timestamp的值作为一个字符串,也许你手动插入它们到表中?

现在,当您读回Scan中的那些项目时,DynamoDB Mapper试图对您的类进行编组,该类声明timestamp应该是Long,然而,该项目显示的是String

我的建议是看一下你的表,看看是否存在这样一个项目,这是导致你的Scan失败。另一种快速检查的方法是将Scan上的Limit设置为1,看看是否没有异常(希望第一项不是坏的:-/)

相关内容

最新更新