首页 > 解决方案 > 在 CrudRepository(Spring data jdbc) 上使用 @query 和表连接

问题描述

我正在尝试使用 @query 的 spring data jdbc,但遇到了一个问题:如果我有一个查询连接 2 个这样的表:

@Query("select a.*, b.* from master a, detail b where b.master_id=a.id and a.id=:id") 

我如何得到回应?官方的Spring Data JDBC、References 和 Aggregates没有给出任何提示。有什么建议吗?

标签: jointablespring-data-jdbc

解决方案


您有多种选择:

使用默认值RowMapper

使用具有您选择的所有字段的属性的类(或该类的集合)作为返回类型。这将为每一行返回一个元素。

由于您指的是这两个表,master并且detail在这种情况下您可能不希望这样。

使用自定义RowMapper

@Query注释允许您指定您自己的rowMapperClass将被实例化并NamedParameterJdbcTemplate与您的查询一起传递给 a的注释。

同样,这将导致每行选择一个结果元素,因此可能不是您想要的。

使用自定义ResultSetExtractor

这可以在@Query注释中再次指定。并允许您以任意方式构造结果。有关更多详细信息,请参阅文档ResultSetExtractor

备注:如果您使用 a从查询结果的多行中ResultSetExtractor创建Master具有多个Detail实例的单个实例,请确保添加ORDER BY master.id. 否则,行的顺序可能是所需的,但实际上并不能保证。


推荐阅读