Spring-data @Query注释和界面

时间:2013-04-24 18:21:49

标签: spring-data spring-data-mongodb

Spring-data-mongodb 1.1.2-Released(Spring-data-common-core 1.4.1.Released)

我在使用带接口的@Query注释时遇到了一些麻烦。例如,如果我定义了以下接口:

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数据项目中打开一个JIRA。

1 个答案:

答案 0 :(得分:2)

我认为你在this one绊倒了。已在宣布的发布here中修复此问题。您应该通过升级到Spring Data MongoDB 1.2.1(它可以传递Spring Data Commons 1.5.1)来看到这一点。