【问题标题】:How to get the results from multiple tables join using single query in Spring Data JPA?如何在 Spring Data JPA 中使用单个查询从多个表连接中获取结果?
【发布时间】:2018-03-27 11:26:12
【问题描述】:

我必须使用 NativeQuery 从多个表中获取数据,如下所示:

    String query = "Select ad.* from address_data ad inner join address a ON a.ad_id = ad.ad_id where address = :address";
    Query q = entityManager.createNativeQuery(query, AddressData.class);
    q.setParameter("address", address);

    List<AddressData> permitList = q.getResultList();

在测试代码时,会创建 2 个查询来获取数据。

  1. 从address_data表中获取数据
  2. 从地址表中获取数据

我怎样才能只获得一个查询来获取数据?

【问题讨论】:

  • 您能指定您使用的是哪个数据库供应商、jpa 供应商和应用服务器吗?
  • @PabloBastidas 我正在使用 db vendor=mysql、spring Data JPA、spring boot 嵌入式 tomcat 服务器。

标签: mysql hibernate jpa spring-data-jpa


【解决方案1】:

在大多数情况下,您希望您的关系延迟获取 fetch=FetchType.LAZY,因此您的列表仅在您明确调用它时才会加载。

话虽如此,您可以通过这种方式初始化惰性关联:

@Query("select ad from address_data ad inner join fetch a.addresss a where a.address = :address")
List<AddressData> methodName(@Param("address") String address);

对此不需要本机查询。您可以为您的实体定义一个存储库并将上述方法添加到其中。

这里有一个关于Fetch Strategy的更详细的解释。 您可能还想查看 repositories 上的 Spring Data JPA 文档。

顺便说一句,您也应该发布您的实体。

【讨论】:

  • 对于这个简单的示例,您不需要本机查询,但是可以说我需要在 PostgreSQL 中使用 WITH RECURSION。我想要一个带有连接提取的查询。目前的解决方法是创建一个视图。
猜你喜欢
  • 2019-03-04
  • 1970-01-01
  • 2015-01-12
  • 2023-03-11
  • 2014-04-23
  • 2017-11-28
  • 2019-02-09
  • 2017-11-08
  • 2017-08-12
相关资源
最近更新 更多