【Spring連載】使用Spring Data訪問 MongoDB----對象映射之非包裝類型
- 一、未包裝類型映射
- 二、未包裝類型字段名
- 三、查詢未包裝對象
- 3.1 按未包裝字段排序
- 3.2 未包裝對象的字段投影
- 3.3 未包裝對象的Query By Example
- 3.4 未包裝對象的存儲庫查詢
- 四、更新未包裝對象
- 五、未包裝對象上的聚合
- 六、未包裝對象上的索引
未包裝實體用于在Java領域模型中設計值對象,其屬性被展平(flattened)到父類的MongoDB Document中。
一、未包裝類型映射
考慮下面的域模型,其中User.name用@Unwrapped注解。@Unwrapped注解表示UserName的所有屬性都應該被展平到擁有name屬性的user document中。
例1:展開對象的示例代碼
class User {@IdString userId;@Unwrapped(onEmpty = USE_NULL) --------1UserName 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:帶有名稱前綴的展開對象的示例代碼