【问题标题】:Why getting NullPointerException when using findBy method of CrudRepository spring-data-dynamodb?为什么在使用 CrudRepository spring-data-dynamodb 的 findBy 方法时出现 NullPointerException?
【发布时间】:2020-03-09 07:57:31
【问题描述】:

我正在使用 spring boot 和 spring spring-data-dynamodb。 从 dynamodb 获取数据时出现 NullPointerException。 这是我的实体类

@DynamoDBTable(tableName = "table1")
public class MyEntity {

    @Id
    private EntId entId;

    @DynamoDBHashKey(attributeName = "hash_key")
    private String hashKey;

    @DynamoDBRangeKey(attributeName = "sort_key")
    private String sortKey;

    @DynamoDBAttribute(attributeName = "col1")
    private String col1;

    @DynamoDBTypeConverted(converter = HashMapConverter.class)
    @DynamoDBAttribute(attributeName = "map")
    private Map<String, List<MetaObject>> metaData;

    //getter and setter
}

元对象类

@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class MetaObject {
    private Integer minProductId;
    private Integer maxProductId;
    private String giftId;
    private String streakName;
}

这就是 DynamoDb 中的内容

{
 "col1": "no name",
 "hash_key": "123",
 "sort_key": "NOVEMBER",
 "map": "{ 
       "123":[ 
           { 
                "minProductId":1,
                "maxProductId":3,
                "streakName":"sun",
                "giftId":"3"
           },
           { 
                "minProductId":4,
                "maxProductId":10,
                "streakName":"mon",
                "giftId":"2"
           }
       ]
   }"
}

我认为地图有问题。请指导。 我的存储库类,

@EnableScan
@Repository
public interface MyRepository extends CrudRepository<MyEntity, String> {

   MyEntity findMyEntityByHashKeyAndSortKey(String hashKey, String sortKey);

   MyEntity findMyEntityByEntId(MyEntityId MyEntityId);
}

我正在使用findMyEntityByHashKeyAndSortKey这个方法来获取数据,

异常日志

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause 
java.lang.NullPointerException: null
   at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBEntityMetadataSupport.getPropertyNameForAccessorMethod(DynamoDBEntityMetadataSupport.java:346) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
   at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl.getRangeKeyPropertyName(DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl.java:76) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
   at org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.getRangeKeyPropertyName(DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.java:89) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
   at org.socialsignin.spring.data.dynamodb.repository.query.DynamoDBEntityWithHashAndRangeKeyCriteria.<init>(DynamoDBEntityWithHashAndRangeKeyCriteria.java:76) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
   at org.socialsignin.spring.data.dynamodb.repository.query.AbstractDynamoDBQueryCreator.create(AbstractDynamoDBQueryCreator.java:71) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
   at org.socialsignin.spring.data.dynamodb.repository.query.AbstractDynamoDBQueryCreator.create(AbstractDynamoDBQueryCreator.java:42) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
   at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:119) ~[spring-data-commons-2.1.10.RELEASE.jar:2.1.10.RELEASE]
   at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:95) ~[spring-data-commons-2.1.10.RELEASE.jar:2.1.10.RELEASE]
   at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:81) ~[spring-data-commons-2.1.10.RELEASE.jar:2.1.10.RELEASE]
   at org.socialsignin.spring.data.dynamodb.repository.query.PartTreeDynamoDBQuery.doCreateQuery(PartTreeDynamoDBQuery.java:56) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]
   at org.socialsignin.spring.data.dynamodb.repository.query.AbstractDynamoDBQuery.doCreateQueryWithPermissions(AbstractDynamoDBQuery.java:81) ~[spring-data-dynamodb-5.1.0.jar:5.1.0]

为什么会出现 NullPointerException?

【问题讨论】:

  • 你用的是哪个版本?
  • spring-data-dynamodb-5.1.0
  • 您在MetaObject 中将streakName 声明为Integer,但它看起来像String ("streakName":"sun",)
  • 我的错误应该是字符串,但仍然得到同样的错误
  • 你能用@DynamoDBHashKey@DynamoDBRangeKey在你的实体类中注释散列键和范围键获取器,看看它是否有效?虽然它是多余的。

标签: java spring-boot spring-data amazon-dynamodb


【解决方案1】:

这对我有用 -> 使用 @DynamoDBHashKey 和 @DynamoDBRangeKey 在实体类中注释哈希键和范围键获取器。谢谢@Amit Naik

【讨论】:

    猜你喜欢
    • 2016-01-29
    • 2017-08-21
    • 2018-06-02
    • 2017-07-26
    • 2014-06-05
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多