Spring 数据 Mongo - 在顶层嵌入实体

Spring Data Mongo - Embed entities at the top-level

我有以下 class(简化示例):

@Entity
public class Person {
  private PersonName personName;

  ...
}

@Embeddable
public class PersonName {
  private String name;
  ...
}

PersonName 包含一些验证和其他信息。

当我将Person保存到Mongo时,PersonName保存为:

{ 
  ... 
  "personName": { "name": "John Smith" },
  ...
}

虽然我知道这种行为在大多数情况下都是有意义的,但在这种情况下,我更希望它只是保存名称,最好是 "personName": "John Smith",而不是嵌套内部对象。

有什么办法可以做到这一点(希望通过添加注释)?

您可以随时为特定类型注册 custom converters。类似于:

@WritingConverter
class PersonNameToStringConverter implements Converter<PersonName, String> {

    @Override
    public String convert(PersonName source) {
        return source.name;
    }
}

@ReadingConverter
class StringToPersonNameConverter implements Converter<String, PersonName> {

    @Override
    public PersonName convert(String source) {
        return new PersonName(source);
    }
}