我有一些带有链接链的Spring实体和存储库:
根-> Foo-> Bar-> Qux-> ...
像这样:
class Root {
private String rootData;
@OneToOne
private Foo foo;
}
class Foo {
private String fooData;
@OneToOne
private Bar bar;
}
class Bar {
private String barData;
@OneToOne
private Qux qux;
}
class Qux {
private String quxData;
@OneToOne
private GoesOn goesOn;
}
有成千上万的Root对象,并且所有关联都是惰性的。
我需要创建一个报告,列出所有具有以下数据的Root对象:
如果我尝试填充在关联中导航的报表,则对于每个Root对象将有N个查询到数据库。
有没有一种方法可以通过使用联接的单个查询来检索所有数据,而无需将关联更改为渴望的?
您可以使用实体图来指定应直接获取的属性(以的方式)
您使用以下注释一个实体
@NamedEntityGraph(
name = "report-eg",
attributeNodes = {
@NamedAttributeNode("foo"),
@NamedAttributeNode(value = "bar", subgraph = "bar-eg"),
},
subgraphs = {
@NamedSubgraph(
name = "bar-eg",
attributeNodes = {
@NamedAttributeNode("qux")
}
)
}
)
然后在提取中使用它
EntityGraph entityGraph = entityManager.getEntityGraph("report-eg");
Map<String, Object> properties = new HashMap<>();
properties.put("javax.persistence.loadgraph", entityGraph);
Post post = entityManager.find(Foo.class, id, properties);
显然,您可能必须根据需要调整一些该图,但是它为您指明了前进的方向。
或者,您可以使用Criteria API。它允许直接指定应建立的关系fetched
(与连接相反)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句