为什么Spring Data存储库中的此方法被视为查询方法?

时间:2016-12-09 08:22:39

标签: spring mongodb spring-boot spring-data spring-data-mongodb

我们已经实现了一个应该能够使用JPA,Couchbase或MongoDB的应用程序。 (目前,未来可能会增加)。我们通过分离每个存储库的存储库成功实现了JPA和Couchbase。 JPA将来自org.company.repository.jpa,而couchbase将来自org.company.repository.cb。所有存储库接口都扩展了org.company.repository中的公共存储库。我们现在通过创建一个新的包org.company.repository.mongo来定位MongoDB。但是我们遇到了这个错误:

No property updateLastUsedDate found for type TokenHistory!

以下是我们的代码:

@Document
public class TokenHistory extends BaseEntity {
    private String subject;
    private Date lastUpdate;
    // Getters and setters here...
}

在org.company.repository.TokenHistoryRepository.java

@NoRepositoryBean
public interface TokenHistoryRepository<ID extends Serializable> extends TokenHistoryRepositoryCustom, BaseEntityRepository<TokenHistory, ID> {
    // No problem here. Handled by Spring Data
    TokenHistory findBySubject(@Param("subject") String subject);
}
// The custom method
interface TokenHistoryRepositoryCustom {
    void updateLastUsedDate(@Param("subject") String subject);
}

在org.company.repository.mongo.TokenHistoryMongoRepository.java下

@RepositoryRestResource(path = "/token-history")
public interface TokenHistoryMongoRepository extends TokenHistoryRepository<String> {

    TokenHistory findBySubject(@Param("subject") String subject);
}

class TokenHistoryMongoRepositoryCustomImpl {
    public void updateLastUsedDate(String subject) {
        //TODO implement this
    }
}

对于Mongo配置

@Configuration
@Profile("mongo")
@EnableMongoRepositories(basePackages = {
    "org.company.repository.mongo"
}, repositoryImplementationPostfix = "CustomImpl",
    repositoryBaseClass = BaseEntityRepositoryMongoImpl.class
)
public class MongoConfig {
}

JPA和Couchbase的设置相同,但我们没有遇到该错误。它能够使用&#34; CustomImpl&#34;前缀,应该是文档的基础。

MongoDB的设置或配置是否有问题?

1 个答案:

答案 0 :(得分:2)

您的TokenHistoryMongoRepositoryCustomImpl实际上并未实现TokenHistoryRepositoryCustom接口,这意味着我们无法找到所找到的类中的updateLastUsedDate(…)被认为是接口方法。因此,它被认为是一种查询方法,然后触发查询派生。

我非常怀疑这适用于其他商店,因为代码检查查询方法在DefaultRepositoryInformation中共享。