Java 枚举为带有DBref和spring数据mongo的映射的键
我试图使用带有映射字段的spring数据Mongodb将映射到类的文档保存和检索到Mongodb中 以下是java中my objects的简化版本: 枚举:Java 枚举为带有DBref和spring数据mongo的映射的键,java,spring,spring-data-mongodb,Java,Spring,Spring Data Mongodb,我试图使用带有映射字段的spring数据Mongodb将映射到类的文档保存和检索到Mongodb中 以下是java中my objects的简化版本: 枚举: public enum MyEnum { VALUE1, VALUE2 } 以及要持久化的实体: public class Entity { @DBRef private Map<MyEnum, MySubEntity> mapField; public Entity(Map<MyEnum,
public enum MyEnum {
VALUE1, VALUE2
}
以及要持久化的实体:
public class Entity {
@DBRef
private Map<MyEnum, MySubEntity> mapField;
public Entity(Map<MyEnum, MySubEntity> mapField){
this.mapField = mapField;
}
}
公共类实体{
@DBRef
私有地图地图场;
公共实体(地图映射字段){
this.mapField=mapField;
}
}
我有一个简单的存储库来保存和检索实体。保存后,将在MongoDB中正确创建文档
当我试图检索它时,问题就出现了。对象实体由存储库创建并返回,但任何访问或使用mapField
字段的尝试都将失败,并出现错误:“java.lang.String无法强制转换为MyEnum”
当使用java debugguer监视检索到的实体对象时,mapField字段似乎有字符串作为键,而不是MyEnum
我尝试注册此类型的自定义转换器,但未成功
我的问题是:我能做些什么来匹配我的用例,还是我的模型不受SpringDataMongoDB支持,我应该修改它
更新:
问题似乎与在地图上使用@DBRef有关。我尝试过不使用它,并且正确检索实体。不知道为什么…你是对的。MongoDb中的键应该是
String
类型。在添加到数据库之前,您可以创建转换器将密钥转换为字符串类型。对密钥使用toString()
方法可能是一种解决方案
这是一个很好的解释,可能也是您问题的答案。我只知道mongodb端的一个,您也可以使用
enum:[“VALUE1”、“VALUE2”]
。java中有EnumMap
。谢谢,但我现在已经确认该映射可以用于enum和spring mongo数据。我只能假设他们在驱动程序上有自定义实现。我更新了我的问题以反映这一点。