我们已经实现了一个应该能够使用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的设置或配置是否有问题?
答案 0 :(得分:2)
您的TokenHistoryMongoRepositoryCustomImpl
实际上并未实现TokenHistoryRepositoryCustom
接口,这意味着我们无法找到所找到的类中的updateLastUsedDate(…)
被认为是接口方法。因此,它被认为是一种查询方法,然后触发查询派生。
我非常怀疑这适用于其他商店,因为代码检查查询方法在DefaultRepositoryInformation
中共享。