如何编写和处理来自多个表的查询结果?

时间:2019-06-13 08:58:31

标签: spring jpa

我有一张桌子A和一张桌子B。 表A的元素与表B中的元素相关(一对多)。 我正在做一个简单的左联接,需要处理结果,但是这样做并不舒服...

例如,以下是测试数据: 表A(“ table_a”)

+--------+---------------+
|  id    |     value     |
+--------+---------------+
|  1     |  A1           |
|  2     |  A2           |
+--------+---------------+

表B(“ table_b”)

+--------+------+---------------+
|  id    | a_id |     value     |
+--------+------+---------------+
|  1     |  1   |  B1           |
|  2     |  1   |  B2           |
|  3     |  2   |  B3           |
|  4     |  2   |  B4           |
|  5     |  2   |  B5           |
+--------+------+---------------+

我正在使用Jpa查询(在存储库中定义),该查询扩展了JpaRepository接口。

我同时拥有这两个表的实体:

UPD。

@Data
@Entity
@Table(schema = "common", name = "table_a")
public class TableA {

    @Id
    @Column(name = "id")
    private Long id;

    @Column(name = "value")
    private String value;

}
@Data
@Entity
@Table(schema = "common", name = "table_b")
public class TableB {

    @Id
    @Column(name = "id")
    private Long id;

    @Column(name = "a_id")
    private Long aId;

    @Column(name = "value")
    private String value;

}

和一个jpa存储库:

public interface TableRepository extends JpaRepository<TableA, Long> {

   interface BothTables {
      String getTableAValue();
      String getTableBValue();
   }

   @Query("SELECT ta.value as tableAValue, tb.value as tableBValue FROM TableA as ta LEFT JOIN TableB as tb ON ta.id = tb.aId")
   Collection<BothTables> findAllData();

}

当我得到查询结果时,我会得到这样的信息:

+-------------+-------------+
| tableAValue | tableBValue |
+-------------+-------------+
|  A1         |  B1         |
|  A1         |  B2         |
|  A2         |  B3         |
|  A2         |  B4         |
|  A2         |  B5         |
+-------------+-------------+

有没有办法以某种方式迭代结果集,这样我就可以通过A值对结果集的每个值进行迭代...类似这样:

   A1
   |_B1
   |_B2

   A2
   |_B3
   |_B4
   |_B5

不是这样的:

   A1 - B1
   A1 - B2
   A2 - B3
   A2 - B4
   A2 - B5

任何人都可以通过一些代码建议我如何实现这种迭代吗?

0 个答案:

没有答案