java - spring-data-hazelcast @Query 注释给出 NullPointerException

标签 java spring-data hazelcast

https://github.com/hazelcast/spring-data-hazelcast SpringBootTest 中使用的库在使用 findAll() 时成功检索列表,如下所示。

@Override
public List<Store> getStores() {
    return storeRepository.findAll();
}

但是,当如下使用 @Query 注释时,它会给出 NullPointerException。

@Override
public List<Store> (String cityId, String countryId) {
    return storeRepository.getStores(cityId,countryId);
}

存储库

public interface StoreRepository extends HazelcastRepository<Store,String> {

    @Query("cityId=%s and countryId=%s")
    public List<Store> getStores(String cityId, String countryId);

}

异常如下。

java.lang.NullPointerException: Retrieving a map instance with a null name is not allowed!

    at com.hazelcast.util.Preconditions.checkNotNull(Preconditions.java:59)
    at com.hazelcast.instance.HazelcastInstanceImpl.getMap(HazelcastInstanceImpl.java:183)
    at com.hazelcast.instance.HazelcastInstanceProxy.getMap(HazelcastInstanceProxy.java:99)
    at org.springframework.data.hazelcast.repository.support.StringBasedHazelcastRepositoryQuery.getMap(StringBasedHazelcastRepositoryQuery.java:68)
    at org.springframework.data.hazelcast.repository.support.StringBasedHazelcastRepositoryQuery.execute(StringBasedHazelcastRepositoryQuery.java:48)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:605)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$invoke$3(RepositoryFactorySupport.java:595)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:595)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:61)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)

是否缺少属性(property)?如果是这样,为什么它可以与 findAll() 一起使用?

最佳答案

Default findAll() method calls Spring Data in SimpleKeyValueRepository instance and it consumes KeyValueTemplate(this instance has HazelcastKeyValueAdapter) findAll() method.

So, @Query annoted queries Hazelcast Spring data implementation's HazelcastQueryMethod.class looks for @KeySpace annotation with value. StringBasedHazelcastRepositoryQuery.class getMap method calls hazelcastInstance's getMap method with that keySpace's value which is map key.

简而言之,您需要向 Store 类添加 @KeySpace("yourMapName") 注解。

<小时/>

额外信息;当您不将 @KeySpace("yourMapName") 放在您的类上时,它将使用确切的包名称进行存储,例如 com.yourpackage.model.Store。

关于java - spring-data-hazelcast @Query 注释给出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59580063/

相关文章:

java - 打印文本文件的行时,阅读器返回每行之间的行间距

hadoop - 如何使用Spring Batch Yarn Application重新启动Map Reduce Hadoop作业?

java - NoSuchBeanDefinitionException:当我使用自动配置时,没有名为 'elasticsearchTemplate'的bean可用

spring-boot - 无法使用键 'dataSource'注册MBean [HikariDataSource(HikariPool-0)]

Spring Data Hazelcast 存储库错误

rest - 使用 Scheduler 和 Rest 调用 Spring Boot 集成测试应用程序

java - 如何决定应用程序的线程数?

java - 从表面 View 切换到主要 Activity 类

java - 从 org.w3c.dom.Node 获取 Xpath

java - Spring Boot JPA不会使用save方法更新记录