【Spring连载】使用Spring Data访问 MongoDB----对象映射之非包装类型
未包装实体用于在Java领域模型中设计值对象,其属性被展平(flattened)到父类的MongoDB Document中。
一、未包装类型映射
考虑下面的域模型,其中User.name用@Unwrapped注解。@Unwrapped注解表示UserName的所有属性都应该被展平到拥有name属性的user document中。
例1:展开对象的示例代码
class User {
@Id
String userId;
@Unwrapped(onEmpty = USE_NULL) --------1
UserName name;
}
class UserName {
String firstname;
String lastname;
}
{
"_id" : "1da2ba06-3ba7",
"firstname" : "Emma",
"lastname" : "Frost"
}
1. 加载name属性时,如果firstname和lastname都为null或不存在,则其值设置为null。通过使用onEmpty=USE_EMPTY,将创建一个空的UserName,其属性可能为null值。
对于不太详细的可嵌入类型声明,请使用“@Unwrapped.Nullable”和“@Unwrapped.Empty”,而不是“@Unwrapped(onEmpty = USE_NULL)”和“@Unwrapped(onEmpty = USE_EMPTY)”。这两个注解都使用JSR-305“@javax.annotation.Nonnull”进行元注解,以帮助进行可空性检查。
可以在展开的对象中使用复杂类型。但是,这些字段本身不能是,也不能包含未展开的字段。
二、未包装类型字段名
通过使用@Unwrapped注解的可选前缀属性,可以多次展开值对象。通过这样做,所选择的前缀被附加到未包装对象中的每个属性或@Field(“…”)名称之前。请注意,如果多个属性呈现为相同的字段名称,则值将相互覆盖。
例2:带有名称前缀的展开对象的示例代码