Spring Data MongoDB 在 org.springframework.data.mapping.PropertyPath 找不到类型的属性

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

我正在使用 Spring Data MongodB 1.4.2.Release 版本。对于 Spring Data MongoDB,我在一个位置创建了自定义存储库接口和实现,并创建了自定义查询函数

getUsersName(Users users)

但是我仍然遇到以下异常:

Caused by: org.springframework.data.mapping.PropertyReferenceException:
  No property get found for type Users! at org.springframework.data.mapping.PropertyPath.     (PropertyPath.java:75) at
    org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327) at 
    org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:359) at
    org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:359) at
    org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307) at
    org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270) at
    org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:241) at
    org.springframework.data.repository.query.parser.Part.(Part.java:76) at
    org.springframework.data.repository.query.parser.PartTree$OrPart.(PartTree.java:201) at
    org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:291) at 
    org.springframework.data.repository.query.parser.PartTree$Predicate.(PartTree.java:271) at 
    org.springframework.data.repository.query.parser.PartTree.(PartTree.java:80) at 
    org.springframework.data.mongodb.repository.query.PartTreeMongoQuery.(PartTreeMongoQuery.java:47)

下面是我的 Spring Data MongoDB 结构:

用户域对象:

        @Document(collection = "users")
        public class Users {
        
        @Id
        private ObjectId id;
        
        @Field ("last_name")
        private String last_name;
        
        @Field ("first_name")
        private String first_name;

       public String getLast_name() {
          return last_name;
      }

      public void setLast_name(String last_name) {
        this.last_name = last_name;
     }

      public String getFirst_name() {
        return first_name;
     }

     public void setFirst_name(String first_name) {
        this.first_name = first_name;
     }
}
        

UsersRepository.java主界面:

        @Repository
        public interface UsersRepository extends MongoRepository<Users,String>, UsersRepositoryCustom { 
        
             List findUsersById(String id);
        
         }
        
       /* UsersRepositoryCustom.java custom interface */
        
        @Repository
        public interface UsersRepositoryCustom {
        
           List<Users> getUsersName(Users users);
        }
        

UsersRepositoryImpl.java自定义接口实现:

        @Component
        public class UsersRepositoryImpl implements UsersRepositoryCustom {
        
        @Autowired
        MongoOperations mongoOperations;
        
        
        @Override
        public List<Users> getUsersName(Users users) {
            return mongoOperations.find(
                    Query.query(Criteria.where("first_name").is(users.getFirst_name()).and("last_name").is(users.getLast_name())), Users.class);
        }
        

Spring JUnit Test 类中的 Mongo Test 函数使用主 UsersRepository 接口调用自定义函数:

        @Autowired
        private UsersRepository usersRepository;
        
        @Test
        public void getUsersName() {
        
            Users users = new Users();
            users.setFirst_name("James");`enter code here`
            users.setLast_name("Oliver");
            List<Users> usersDetails = usersRepository.getUsersName(users);
            System.out.println("users List" + usersDetails.size());
        
        
            Assert.assertTrue(usersDetails.size() > 0);
        }
mongodb spring-data mongodb-java spring-data-mongodb
2个回答
1
投票

您的存储库接口中的查询方法声明无效。正如参考文档中明确指出的,查询方法需要以

get…By
read_By
find…By
query…by
开头。


0
投票

对于自定义存储库,不需要像 Oliver 所说的方法命名约定。 我有一个名为 updateMessageCount

的方法

话虽如此,我看不出这里提供的代码有问题。

我在这篇文章的帮助下解决了这个问题,其中我没有正确命名我的 Impl 类:

尝试使用 Spring Data JPA 创建自定义存储库时找不到类型错误的属性

© www.soinside.com 2019 - 2024. All rights reserved.