【Spring连载】使用Spring Data访问 MongoDB----对象映射之非包装类型

发布于:2024-03-04 ⋅ 阅读:(100) ⋅ 点赞:(0)


未包装实体用于在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:带有名称前缀的展开对象的示例代码

三、查询未包装对象

3.1 按未包装字段排序

3.2 未包装对象的字段投影

3.3 未包装对象的Query By Example

3.4 未包装对象的存储库查询

四、更新未包装对象

五、未包装对象上的聚合

六、未包装对象上的索引