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);
}
}
我有以下 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);
}
}