我正在尝试将通用方法update
添加到我的所有Mongo存储库中。
这是我的代码:
BaseMongoRepository.java
@NoRepositoryBean
public interface BaseMongoRepository<T, ID extends Serializable> extends MongoRepository<T, ID> {
void update(T entity, ID id);
}
BaseMongoRepositoryImpl.java
@NoRepositoryBean
public class BaseMongoRepositoryImpl<T, ID extends Serializable> extends SimpleMongoRepository<T, ID> implements BaseMongoRepository<T, ID> {
private final MongoOperations mongoOperations;
public BaseMongoRepositoryImpl(MongoEntityInformation<T, ID> metadata, MongoTemplate mongoOperations) {
super(metadata, mongoOperations);
this.mongoOperations = mongoOperations;
}
public void update(T entity, ID id) {
Query query = Query.query(Criteria.where("_id").is(id));
Document doc = new Document();
mongoOperations.getConverter().write(entity, doc);
Update update = Update.fromDocument(new Document("$set", doc)); // Update.fromDocument(doc);
mongoOperations.updateFirst(query, update, entity.getClass());
}
}
MongoDB Config.java
@Configuration
@EnableMongoRepositories(repositoryBaseClass = BaseMongoRepositoryImpl.class)
public class MongoDbConfig {
// ...
}
FeedbackMongoRepository
public interface FeedbackMongoRepository extends BaseMongoRepository<FeedbackEntity, String> {
}
但无论我尝试什么,我总是在应用程序启动时出现以下错误:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'feedbackMongoRepository': Invocation of init method failed;
nested exception is org.springframework.data.mapping.PropertyReferenceException:
No property update found for type FeedbackEntity!
任何帮助都将不胜感激!
问题是@EnableMongoRepositories
与存储库在不同的包中。我通过添加basePackages
参数解决了这个问题:
@EnableMongoRepositories(
basePackages = "cz.connect.server",
repositoryBaseClass = BaseMongoRepositoryImpl.class)