Spring Data Mongo - 将实体嵌入顶层

时间:2018-04-13 06:50:39

标签: spring mongodb spring-data spring-data-mongodb

我有以下课程(简化示例):

@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&#34 ;而不是嵌套内部对象。

有没有办法实现这一点(希望通过添加注释)?

1 个答案:

答案 0 :(得分:1)

您始终可以为特定类型注册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);
    }
}