我有以下两个简单的类,它们是我的问题结构的典范:
第一个类,嵌入了第二个类
@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的复杂查询,这意味着我们必须执行多个查询,这不是我们想要的。
所以,主要的问题是:
如何在不加载“父”-object的情况下,将myEmbeddeds列表中的一个特定元素作为MyEmbedded-object直接加载?
也许有一种方法可以使用AggregationPipeline?(您可以在pipeline.aggregate()方法中定义一个“目标”类,您可以在morphia的测试中找到一些示例,就像您可以看到here一样,但我没有让它适用于我的情况)
发布于 2017-05-04 19:03:04
您可以根据MyEmbedded
的属性查询MyClass
,然后使用投影仅从结果中提取myEmbeddeds
。
https://stackoverflow.com/questions/43790180
复制相似问题