Spring Data mongodb 2.1.0 中的PropertyReferenceException

问题描述 投票:0回答:1

我使用的是spring data mongodb 2.1.0。 并具有存储库的自定义实现,如下所示:

public class ProductItemRepositoryImpl implements ProductItemRepositoryCustom {


  @Override
  public List<String> getItemIdsGivenSkuOrCode(String itemIdType, String itemId) {
    Query query = new Query();
    query.addCriteria(Criteria.where(itemIdType).is(itemId));
    return mongoTemplate
        .findDistinct(query, FieldNames.PRODUCT_ITEM_ID, ProductItem.COLLECTION_NAME,
            String.class);
  }
} 

自定义存储库:

public interface ProductItemRepositoryCustom {
  List<String> getItemIdsGivenSkuOrCode(String itemIdType, String itemId);
}

回购:

public interface ProductItemRepository
    extends MongoRepository<ProductItem, Long>, ProductItemRepositoryCustom {
}

我不明白为什么它考虑自定义方法(getItemIdsGivenSkuOrCode)作为属性。 当我运行这个时,出现低于给定的错误:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productItemRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property getItemIdsGivenSku found for type ProductItem!
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1699) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:573) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:740) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
java spring mongodb spring-data spring-data-mongodb
1个回答
0
投票

我认为它必须与方法命名有关

假设

ProductItem
中的字段是

String itemIdType;
String itemId;

方法名称为

public interface ProductItemRepositoryCustom {
  List<String> findByItemIdTypeOrItemId(String itemIdType, String itemId);
}

或者为了更安全,您可以添加查询

@Query("{ 'itemIdType': ?0, 'itemId': ?1}")
public List<String> findByItemIdTypeOrItemId(String itemIdType, String itemId);
© www.soinside.com 2019 - 2024. All rights reserved.