我正在尝试使用带有映射字段的spring数据mongodb将映射到类的文档保存和检索到Mongodb中。
这是我的java对象的简化版本:枚举:
public enum MyEnum {
VALUE1, VALUE2
}
以及要保留的实体:
public class Entity {
@DBRef
private Map<MyEnum, MySubEntity> mapField;
public Entity(Map<MyEnum, MySubEntity> mapField){
this.mapField = mapField;
}
}
我有一个简单的存储库来保存实体并检索它们。保存后,将在MongoDB中正确创建文档。
当我尝试检索它时出现问题。对象Entity由存储库创建并返回,但是任何尝试访问或使用mapField
字段的尝试都会失败,并显示以下错误:"java.lang.String cannot be cast to MyEnum"
当使用java debugguer监视检索到的Entity对象时,mapField字段似乎将String作为键,而不是MyEnum。
我尝试为这种类型注册自定义转换器未成功。
我的问题是:我可以做些什么来匹配我的用例,或者我的模型只是不受Spring数据mongodb支持,我应该更改它吗?
你是对的。 MongoDb中的键应为String
类型。您可以创建转换器以将密钥转换为字符串类型,然后再添加到数据库。您可以使用MyEnum.VALUE1.name()
作为键。
Here是对您问题的很好的解释。