枚举作为带有带有Spring data mongo的DBref的Map的键

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

我正在尝试使用带有映射字段的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支持,我应该更改它吗?

java spring spring-data-mongodb
1个回答
0
投票

你是对的。 MongoDb中的键应为String类型。您可以创建转换器以将密钥转换为字符串类型,然后再添加到数据库。您可以使用MyEnum.VALUE1.name()作为键。

Here是对您问题的很好的解释。

© www.soinside.com 2019 - 2024. All rights reserved.