使用Spring和Hibernate从多个表联接中检索数据

marcellorvalle:

我有一些带有链接链的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对象:

  • rootData
  • fooData
  • barData
  • quxData

如果我尝试填充在关联中导航的报表,则对于每个Root对象将有N个查询到数据库。

有没有一种方法可以通过使用联接的单个查询来检索所有数据,而无需将关联更改为渴望的?

Antoniossss:

您可以使用实体图来指定应直接获取的属性(以的方式)

您使用以下注释一个实体

@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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Hibernate的多个表中插入数据

如何从MySQL和PHP中的多个表中检索数据?

Laravel Eloquent从多个表中检索数据

在Spring Boot / Hibernate / JPA中为联接表指定表和字段名称

如何使用联接从表中检索数据

SQLAlchemy Join从多个表中检索数据

如何使用php从具有多个表的mysql数据库中检索大量数据

如何使用“联接”从两个表中检索数据?

如何使用父键从联接表中检索所有数据

根据ID从多个表中检索数据

SQL Server从多个表中检索数据

从多个表中检索数据时使用临时表还是嵌套选择?

使用联接从表中检索数据

使用Spring MVC和Hibernate Rest服务从数据库保存和检索图像

在CakePHP中联接多个表并检索数据

如何使用实体框架从多个表中检索数据

使用联接从多个表中检索记录

Hibernate:动态联接多个表

从phpmyadmin中的多个表中检索数据

使用php从mysql数据库的多个表中检索多个值的效率如何

通过Spring MVC在Hibernate中使用@ElementCollection检索表会导致该表的多个实例

弹簧数据联接多个表

如何使用PHP表单从多个表中检索数据?

使用联接进行口才查询以检索数据透视表和相关数据

使用左外部联接和on子句从具有公共列的两个不同表中检索数据

使用控制器从多个表中检索数据

如何使用spring和hibernate从DB检索数据并在jsp中打印?

使用 Hibernate 和 Spring MVC 从数据库中检索数据。错误 - “java.lang.NumberFormatException:对于输入字符串:”

如何使用 Room DAO 访问数据以从多个表中检索数据