在 spring jparepository 中加入多个表

Posted

技术标签:

【中文标题】在 spring jparepository 中加入多个表【英文标题】:join more than one table in spring jparepository 【发布时间】:2017-09-02 13:01:50 【问题描述】:

我正在尝试通过加入来获取记录。我是春季 jparepository 的新手。 我知道每个实体(表)都有单独的存储库,当我实现时我需要定义主键的实体和数据类型。

谁能建议我如何通过连接两个表来获取记录。

我有两个回购如下:

public interface AEntityRepository extends JpaRepository<AEntity, Integer>

public interface BEntityRepository extends JpaRepository<BEntity, Integer>

我想加入以上两个实体(AEntity,BEntity)。 我知道我可以使用以下内容进行自定义查询:

@Query("SELECT ****** FROM AEntity ae")
AEntity findCustomrRecords();

但是我可以用 join 编写相同类型的查询(join 查询)。 我是否需要有一个单独的存储库来实现其他一些类。

谁能帮忙。

我正在使用 mysql

【问题讨论】:

能否展示一下AEntity和BEntity之间的关系,使用Spring JPA比使用SQL要容易得多。 它是一对一的关系。对于 AEntity 中的每条记录,BEntity 中都会有一条记录。我想要一个查询,比如 select b.id from a,b where a.id1=b.id1 and a.id2=b.id2 and a.time>b.time1 and a.time 【参考方案1】:

我了解每个实体(表)都有单独的存储库

这是一个很常见的误解。您不希望每个实体都有一个存储库,而是每个聚合根。见http://static.olivergierke.de/lectures/ddd-and-spring/

关于您手头的具体问题:在您的存储库接口中创建一个自定义方法并使用 JPQL 对其进行注释应该可以解决问题。所以你会得到类似的东西:

@Query("select a from BEntity b join b.a a where b.foo = :foo")
AEntity getAllFooishAs(String foo);

您可以在查询中使用任何join syntax JPQL offers。

【讨论】:

我有 3 张桌子。 Table1 与具有公共 Id 的 Table2 映射。表 2 与表 3 映射,具有共同的 Id。我想通过组合 table1 和 table2,然后是 table2 和 table3 从 table3 中获取记录。所以最后我应该有来自table1和table3的记录作为对象列表,这样我就可以分成AEntity和CEntity。每条记录都有来自 table1 和 table3 的列。我想将记录(table1 和 table3 的组合)保存到另一个表(table4)。如果还不清楚,请告诉我。 这是一个完全不同的问题。

以上是关于在 spring jparepository 中加入多个表的主要内容,如果未能解决你的问题,请参考以下文章

在测试中使用 Spring JpaRepository

将 JpaRepository 与 Spring 数据和 Hibernate 一起使用

有没有办法在Spring JPARepository中使用查询来填充非列成员?

Spring JpaRepository 中的 %Like% 查询

spring使用 hibernate jpa JpaRepository

Spring JpaRepository - 分离和附加实体