java.lang.String类型内没有@DynamoDBHashKey注释的方法或字段

java.lang.String类型内没有@DynamoDBHashKey注释的方法或字段,java,amazon-web-services,nosql,spring-data,amazon-dynamodb,Java,Amazon Web Services,Nosql,Spring Data,Amazon Dynamodb,我不知道他为什么不运行这个项目 @Data @DynamoDBTable(tableName = "tableName") public class entityName implements Serializable { private static final long serialVersionUID = 1L; @Id @DynamoDBHashKey @DynamoDBAutoGeneratedKey private String id;

我不知道他为什么不运行这个项目

@Data
@DynamoDBTable(tableName = "tableName")
public class entityName implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @DynamoDBHashKey
    @DynamoDBAutoGeneratedKey
    private String id;

    @DynamoDBRangeKey
    private String rk;

    private String sy;
}

Caused by: java.lang.IllegalArgumentException: No method or field annotated by @DynamoDBHashKey within type java.lang.String!
    at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBHashAndRangeKeyMethodExtractorImpl.<init>(DynamoDBHashAndRangeKeyMethodExtractorImpl.java:99) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
    at org.socialsignin.spring.data.dynamodb.repository.support.CompositeIdHashAndRangeKeyExtractor.<init>(CompositeIdHashAndRangeKeyExtractor.java:31) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
    at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl.getHashAndRangeKeyExtractor(DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl.java:71) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
    at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.<init>(DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.java:49) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
    at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBEntityMetadataSupport.getEntityInformation(DynamoDBEntityMetadataSupport.java:125) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
    at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactory.getEntityInformation(DynamoDBRepositoryFactory.java:104) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
    at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactory.getDynamoDBRepository(DynamoDBRepositoryFactory.java:128) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
    at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactory.getTargetRepository(DynamoDBRepositoryFactory.java:150) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:305) ~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:297) ~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
    at org.springframework.data.util.Lazy.getNullable(Lazy.java:211) ~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
    at org.springframework.data.util.Lazy.get(Lazy.java:94) ~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:300) ~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1837) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1774) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    ... 47 common frames omitted
@数据
@DynamoDBTable(tableName=“tableName”)
公共类entityName实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@发电机钥匙
@发电键
私有字符串id;
@动力键
私有字符串rk;
私人字符串sy;
}
原因:java.lang.IllegalArgumentException:类型java.lang.String内没有@DynamoDBHashKey注释的方法或字段!
在org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBHashAndRangeKeyMethodExtractorImpl.(DynamoDBHashAndRangeKeyMethodExtractorImpl.java:99)~[spring-data-dynamodb-5.1.0.jar:5.1.0]
在org.socialsignin.spring.data.dynamodb.repository.support.CompositeIdHashAndRangeKeyExtractor.(CompositeIdHashAndRangeKeyExtractor.java:31)~[spring-data-dynamodb-5.1.0.jar:5.1.0]
在org.socialsignin.spring.data.dynamodb.repository.support.dynamodbhashandrangekeydractingenttitymetadampl.gethashandrangekeydractingenttitymetadampl.java:71)~[spring-data-dynamodb-5.1.0.jar:5.1.0]
在org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.(DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.java:49)~[spring-data-dynamodb-5.1.0.jar:5.1.0]
在org.socialsignin.spring.data.dynamodb.repository.support.dynamodbentitymetatasupport.getEntityInformation(dynamodbentitymetatasupport.java:125)~[spring-data-dynamodb-5.1.0.jar:5.1.0]
在org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactory.getEntityInformation(DynamoDBRepositoryFactory.java:104)~[spring-data-dynamodb-5.1.0.jar:5.1.0]
在org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactory.getDynamoDBRepository(DynamoDBRepositoryFactory.java:128)~[spring-data-dynamodb-5.1.0.jar:5.1.0]
在org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactory.getTargetpository(DynamoDBRepositoryFactory.java:150)~[spring-data-dynamodb-5.1.0.jar:5.1.0]
在org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:305)~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
在org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:297)~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
在org.springframework.data.util.Lazy.getNullable(Lazy.java:211)~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
在org.springframework.data.util.Lazy.get(Lazy.java:94)~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
在org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertieSet(RepositoryFactoryBeanSupport.java:300)~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1837)~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1774)~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
... 省略47个公共框架

您必须为字段设置getter和setter,如文档中所述:

如果注释直接应用于类字段,则必须在同一个类中声明相应的getter和setter。


还可以看一下开发者指南:

我认为问题在于这一点:

@DynamoDBRangeKey
私有字符串rk;
我注意到您有一个
@Id
注释,这意味着您可能有一个类似以下内容的Spring数据存储库:

@存储库
@启用扫描
公共接口ServiceItemRepository扩展了Crudepository{
}
@Id
注释向Spring数据发出信号,表明这是存储库声明中
字符串的主题。但复合键似乎把事情搞得一团糟。基本上,如果您删除
@Id
并且不在此处使用存储库,或者将
@DynamoDBRangeKey
替换为普通的
@DynamoDBAttribute
。你会发现事情又开始起作用了


顺便说一句:Lombok与问题无关。

试着问一个详细的问题。代码格式化。你注意到Lombok项目注释@Data?我认为OP会认为getter和setter将由生成的访问器提供。有趣的是,这没有被识别。Lombok应该在运行时之前生成访问器,因此有效地,相应的getter和setter被声明在同一个类中。然后必须在检查AWS注释之前检查这些getter(和setter)是否存在。我的意思是回答这个问题,我刚刚做了这件事——结果证明,接球手和二传手并不是问题所在,但它仍然有点奇怪,因为它不起作用。我的意思是我知道基本原因,但不知道根本原因。