设法解决了问题。
基本上,我需要将包含 Vehicle 类的包添加到我的 Mongo 配置类中,如下所示:
public class CustomerDbConfig extends AbstractMongoConfiguration {
...
@Override
protected Collection<String> getMappingBasePackages() {
Collection<String> mappingBasePackages = new ArrayList<>();
mappingBasePackages.add(Vehicle.class.getPackageName());
return mappingBasePackages;
}
}
我认为上述方法在大多数情况下都应该有效。我的理解是,如果 Configuration 类与 Vehicle 类在同一个包中,则可能不需要上述内容,但是,就我而言,它们位于两个不同的包中。
此外,对我来说这有点复杂,因为我有多个配置不同的 Mongo 数据库和不同的 MongoTemplate bean。
最初,我创建MongoTemplate 如下:
@Primary
@Bean(name = "customerMongoTemplate")
public MongoTemplate customerMongoTemplate() {
MongoTemplate mongoTemplate = new MongoTemplate(mongoClient(), getDatabaseName());
MappingMongoConverter converter = (MappingMongoConverter) mongoTemplate.getConverter();
converter.setCustomConversions(customConversions());
converter.afterPropertiesSet();
return mongoTemplate;
}
但是,以这种方式通过MongoTemplate 获取MappingMongoConverter 意味着从未调用过getMappingBasePackages。我尝试通过执行以下操作来获取转换器:
@Primary
@Bean(name = "customerMongoTemplate")
public MongoTemplate customerMongoTemplate() {
return new MongoTemplate(mongoDbFactory(), mappingMongoConverter());
}
但是它不起作用,因为 mongoDbFactory() 和 mappingMongoConverter() 正在为不同的 MongoDB 配置返回 bean...这对我来说是理想的解决方案,但不知道如何让它可靠地与多个配置类。
最后,我设法可靠地工作如下:
@Primary
@Bean(name = "customerMongoTemplate")
public MongoTemplate customerMongoTemplate() throws Exception {
SimpleMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient(), getDatabaseName());
MongoMappingContext mongoMappingContext = mongoMappingContext();
mongoMappingContext.setInitialEntitySet(getInitialEntitySet());
mongoMappingContext.afterPropertiesSet();
MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(mongoDbFactory), mongoMappingContext);
converter.setCustomConversions(customConversions());
converter.afterPropertiesSet();
return new MongoTemplate(mongoDbFactory, converter);
}
我对上述方法并不完全满意,它有点挑剔,可能会导致新版本的 Spring 出现问题,但它确实有效。