Cuối cùng tôi đã tìm thấy một giải pháp cho điều này. Có lẽ không phải là lựa chọn tốt nhất, nhưng hiệu quả.
Những gì tôi đã làm là xóa trình chuyển đổi khỏi String
thành ObjectId
MongoTemplate
đó sử dụng thông qua QueryMapper
. Bằng cách này, tôi đã tạo trình chuyển đổi Mongo sau:
public class CustomMongoConverter extends MappingMongoConverter {
public CustomMongoConverter(MongoDbFactory mongoDbFactory, MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext) {
super(mongoDbFactory, mappingContext);
conversionService.addConverter(new Converter<String, ObjectId>() {
@Override
public ObjectId convert(String source) {
throw new RuntimeException();
}
});
}
}
Và sau đó, tôi đã chuyển việc triển khai trình chuyển đổi đó sang MongoTemplate
:
<bean id="mongoConverter" class="com.abcompany.model.repositories.utils.CustomMongoConverter">
<constructor-arg ref="mongoDbFactory"/>
<constructor-arg>
<bean class="org.springframework.data.mongodb.core.mapping.MongoMappingContext"/>
</constructor-arg>
</bean>
<bean class="org.springframework.data.mongodb.core.MongoTemplate" id="mongoTemplate">
<constructor-arg ref="mongoDbFactory"/>
<constructor-arg ref="mongoConverter"/>
</bean>
Bằng cách này, khi cố gắng chuyển đổi từ String sang ObjectId, nó sẽ ném ra một ngoại lệ và nó không thực hiện điều đó. Xin lưu ý rằng bạn có thể chỉ cần xóa trình chuyển đổi khỏi conversionService
.