在带有表连接的CrudRepository(Spring data jdbc)上使用@query

时间:2019-11-19 18:56:51

标签: jointable spring-data-jdbc

我正在尝试使用@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, and Aggregates对此没有任何提示。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您有多种选择:

使用默认的RowMapper

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

由于您将两个表分别称为masterdetail,因此在这种情况下您可能不希望这样。

使用自定义RowMapper

将被实例化的@Query annotation allows you to specify your own rowMapperClass并与您的查询一起传递给NamedParameterJdbcTemplate

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

使用自定义ResultSetExtractor

This can be again specified in the @Query annotation。 并允许您以任意方式构造结果。 有关更多详细信息,请参见ResultSetExtractor的文档。

备注:如果要使用ResultSetExtractor创建单个Master并包含来自查询结果多行的多个Detail实例,请确保添加一个ORDER BY master.id。否则,行的顺序可能是所希望的,但实际上并不能保证。