管理来自多个表的数据 Spring data JPA

Posted

技术标签:

【中文标题】管理来自多个表的数据 Spring data JPA【英文标题】:Managing data from multiple tables Spring data JPA 【发布时间】:2012-08-04 04:37:03 【问题描述】:

在应用程序中使用 Spring Data JPA 时,您通常会定义实体 (@Entity) 并编写存储库接口(扩展 CrudRepository)并进行一些超出此问题范围的额外配置。

例如,

@Entity
public class Product 
    // code removed for brevity


public interface ProductRepository extends CrudRepository<Product, Long> 
    // code removed for brevity

现在,如果我有多个像上面这样的实体并且需要设计一个像 searchByProductAndUserAndLocation 这样的服务 API(假设所有三个都是数据库表),我应该如何在 Spring data JPA 中执行此操作?假设我也为 Quantity/Cost 编写实体类。显然,我需要根据某些条件(使用外键)加入表,但我不清楚哪个存储库应该保存这样的查询,因为我觉得这里没有特定的 owner 存储库/类.

另外,我可以通过 ProductService、LocationService 等公开数据,然后组合结果,但我不会利用数据库层连接或其他最终影响应用程序性能的优化。

我确定这是一个非常常见的用例,一般做法是什么?

提前致谢。

【问题讨论】:

在使用 searchByProductAndUserAndLocation 方法的情况下,它的返回类型是什么? 【参考方案1】:

我认为根据方法的返回类型将您的方法分配给存储库是合理的,例如:

public interface ProductRepository extends CrudRepository<Product, Long> 
  List<Product> searchByUserAndLocation(User user, Location location); 

【讨论】:

以上是关于管理来自多个表的数据 Spring data JPA的主要内容,如果未能解决你的问题,请参考以下文章

多租户:使用 Spring Data JPA 管理多个数据源

SpringBoot+Spring Data JPA整合H2数据库

SpringBoot+Spring Data JPA整合H2数据库

使用来自多个表的信息来记录交付的通用或特定 DAO?

如何管理跨多个表的大型数据集? UNION 与大表?

Spring jdbc中多个表数据到单个bean的映射