MongoDB:找不到类型类 java.lang.Integer 的 PersistentEntity

问题描述 投票:0回答:0

在尝试插入整数/长整数/列表时,我得到了

Couldn't find PersistentEntity for type class...

MongoCustomConvertions 对于自定义转换类完全正常工作。 只有 Integer、Long 等基本类型失败。

MongoCustomConversions bean 在 MongoConfig 文件中定义。

public class MongoConfigContext extends AbstractMongoClientConfiguration { 
.....
.....
.....
    @Override
    @Bean
    public MongoCustomConversions customConversions() {
        List<Converter<?, ?>> converters = new ArrayList<>();
        if (extension != null) {
            List<Converter<?, ?>> additionalConverters = extension.additionalConverters();
            if (!CollectionUtils.isEmpty(additionalConverters)) {
                converters.addAll(extension.additionalConverters());
            }
        }
        return new MongoCustomConversions(converters);
    }
.....
.....
.....
}

由于这是父库的一部分,我添加了一个抽象类来提供一种通过 MongoConfigContextExtension 类在服务中添加 CustomConversions 的方法。

public abstract class MongoConfigContextExtension {
    
    public List<Converter<?, ?>> additionalConverters() {
        return Collections.emptyList();
    }

}

将任何对象转换为 DBObject 的方法

protected Object convertToDbData(Object data) {
    if (data == null || data instanceof BSONObject || data instanceof String) {
        return data;
    } else {
        if (data instanceof Collection || data.getClass().isArray()) {
            BasicDBList list = new BasicDBList();
            ((Collection)data).forEach(datum -> {
                DBObject dbData = new BasicDBObject();
                converter.write(datum, (Bson) dbData); // fails when datum is numeric
                list.add(datum);
            });
            return list;
        } else {
            DBObject dbData = new BasicDBObject();
            converter.write(data, (Bson) dbData); // fails when datum is numeric
            return dbData;
        }
    }
}

测试班:

    @Test
    public void testIntCovert() {
        Integer val = new Integer(20);
        curator.update(DEMO_PATH, val, Integer.class);
    }

错误日志:

org.springframework.data.mapping.MappingException: Couldn't find PersistentEntity for type class java.lang.Integer

    at org.springframework.data.mapping.context.MappingContext.getRequiredPersistentEntity(MappingContext.java:80)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:883)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:834)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:120)
    at com.abc.def.xyz.event.ConfigEventHandler.convertToDbData(ConfigEventHandler.java:52)

有没有什么东西不见了!

我在我的系统中克隆了 spring-data-mongodb 项目,我尝试从 MappingMongoConverterUnitTests 执行相同的测试用例以检查是否有任何配置遗漏。

如果 Integer/Long/List 失败,这些也会写

See this image -> 测试文件截图

预期:基本类型的 Mongo 转换应该有效。

persistence spring-mongodb
© www.soinside.com 2019 - 2024. All rights reserved.