我有以下两个简单的类,它们是我问题结构的典范:
第一个类,嵌入第二个
@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,但我没有得到适用于我的情况)
答案 0 :(得分:0)
您可以根据MyClass
的属性查询MyEmbedded
,然后使用投影仅从结果中提取myEmbeddeds
。