我正在开发使用spring数据作为抽象来访问databaseMongoDB的spring引导项目。我只想为两个特定的操作更改写关注点。
下面是用于访问Mongo集合的实体和存储库类:
@Document(collection = "tests")
@Data
@NoArgsConstructor
public class Test {
@Id
private String id;
private String name;
private String category;
}@Repository
public interface TestRepository extends BaseMongoRepository<Test> {
...
@DeleteQuery(value="{'id':?0}, { writeConcern: { w : '2', wtimeout : 1000 }, delete=true")
void safeDeleteByTestId(String id,String name);
default void updateNameForAll(String category) {
final Query query = query(where("category").is(category);
final Update update = Update.update("name", name);
getMongoOperations().updateMulti(query, updategetMetadata().getCollectionName());
}
...
}如何修改updateNameForAll方法以只增加此查询的写关注点?我不想覆盖整个集合或数据库的写关注点。
好样的,兰多。
发布于 2022-02-15 17:22:53
我找到了解决这个问题的办法:
我创建了一个名为ETestRepository的新接口,如下所示:
public interface ETestRepository {
void safeUpdateNameForAll(String category);
}然后,我创建了一个接口的实现:
public interface ETestRepositoryImpl implements ETestRepository {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public void safeUpdateNameForAll(String accountId, String contextId, ChangeSetRowAction action) {
mongoTemplate.setWriteConcern(WriteConcern.W2);
final Query query = query(where("category").is(category);
final Update update = Update.update("name", name);
mongoTemplate.updateMulti(query,update, Test.class);
}
}最后,我修改了TestRepository接口以扩展ETestRepository接口以包括safeUpdateNameForAll方法。
https://stackoverflow.com/questions/71129617
复制相似问题