我有以下兩個簡單的類,其是示例性我的問題的結構:直接裝入嵌入類而不嵌入類嗎啡
第一類,其中嵌入了第二個
@Entity
public class MyClass {
@Id
private String myClassName;
private String otherField;
@Embedded
private List<MyEmbedded> myEmbeddeds;
}
和將被嵌入第二類:
@Embedded
public class MyEmbedded {
@Id
private String name;
private String some;
private String other;
}
在現實情況下,這兩個類有一個更爲複雜的結構,有很多的字段,並引用。 因此,我不想加載整個MyClass對象,因爲在大多數情況下,我只需要MyEmbedded列表中的一個特定元素(大多數情況下只具有隻讀訪問權限)。
另一方面,將MyEmbedded類設置爲簡單引用是沒有選擇的,因爲我們對MyClass有一些複雜的查詢,而這些查詢嚴重依賴於myEmbeddeds,這意味着我們將不得不執行多個查詢,不想要。
所以,主要的問題是:
我如何可以加載myEmbeddeds列表中的一個特定元素直接作爲MyEmbedded對象,而不加載「父」 -object?
也許有使用AggregationPipeline的方法? (您可以在pipeline.aggregate()方法中定義一個「目標」類,並且可以在morphia的測試中找到一些示例,因爲您可以看到here,但我沒有爲我的案例工作)
但是,這也會加載和映射列表中包含的任何其他'myEmbedded'對象,而不僅僅是我需要的一個(最耗時的部分來獲取MyClass對象將花費在該列表上) – pthum