如何使用Spring Data JPA中的单个查询来获取多个表的结果?

时间:2018-03-27 11:26:13

标签: mysql hibernate jpa spring-data-jpa

我必须通过使用类似下面的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. 从地址表中获取数据
  3. 如何只获取一个查询来获取数据?

1 个答案:

答案 0 :(得分:0)

在大多数情况下,您希望您的关系被延迟抓取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文档。

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