Spring-data @Query 注解和接口(interface)

标签 spring-data spring-data-mongodb

Spring-data-mongodb 1.1.2-已发布(Spring-data-common-core 1.4.1.已发布)

我在使用 @Query 注释和接口(interface)时遇到一些问题。例如,如果我定义了以下接口(interface):

public interface Person {
    String getName();
    Integer getAge();
}

并定义以下存储库:

public interface PersonRepository extends MongoRepository<Person, String> {

    @Query(value="{ 'name': ?0}")
    List<Person> findPeople(String name);
}

尝试查询时出现以下异常:

java.lang.IllegalArgumentException: No property name found on com.abc.People!
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:225)
    at org.springframework.data.mongodb.core.convert.QueryMapper.getPath(QueryMapper.java:202)
    at org.springframework.data.mongodb.core.convert.QueryMapper.getTargetProperty(QueryMapper.java:190)
    at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:86)
    at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1336)
    at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1322)
    at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:495)
    at org.springframework.data.mongodb.repository.query.AbstractMongoQuery$Execution.readCollection(AbstractMongoQuery.java:123)

如果我的 @Query 更新为:

public interface PersonRepository extends MongoRepository<Person, String> {
    @Query(value="{ 'abcd': ?0}")
    List<Person> findPeople(String name);
}

如果我从界面中删除 getName() 函数,也不会发生这种情况。

有谁遇到过这个问题并可以告诉我我做错了什么或者这是否是一个已知问题?我将在 Spring-data 项目中打开一个 JIRA。

最佳答案

我认为你绊倒了this one 。此问题已在发布的版本 here 中修复。 。您应该通过升级到 Spring Data MongoDB 1.2.1(它会传递性地引入 Spring Data Commons 1.5.1)来看到它的工作原理。

关于Spring-data @Query 注解和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16199415/

相关文章:

java - 如何在 spring boot 1.4.1 中配置 querydsl?

java - Spring-Data MongoDB 更新所有文档字段

spring-data - 是否可以在 Spring Data 中使用 Mongo $natural 运算符?

spring-boot - 为什么 @ComponentScan 然后 DataMongoTest 不起作用

java - Spring Data Mongo 似乎忽略了 XML 配置中的主机

spring-data - 如何在响应式 Spring Data 中应用分页?

java - 使用 Spring Data JDBC 持久保存资金

java - spring mvc 如何测试我的服务是否在发布请求中保留实体

spring - 缺少类 org.springframework.objenesis.ObjenesisStd

java - Spring数据Mongodb聚合排序顺序