join - 在 CrudRepository(Spring data jdbc) 上使用 @query 和表连接

标签 join 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没有给出任何提示。 有什么建议吗?

最佳答案

您有多种选择:

使用默认的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。否则,行的顺序可能是期望的,但实际上不能保证。

关于join - 在 CrudRepository(Spring data jdbc) 上使用 @query 和表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58941064/

相关文章:

spring-data-jdbc - 两个不同聚合的同一实体

java - 如何使用 Spring Data JDBC 处理复合键

java - 如何在 Spring Data JDBC 中将实体映射到表?

python - 联合超过 2 个 Pandas 数据框

mysql - 我的sql代码哪里出了问题?

java - Spring Data JDBC 的奇怪一对多行为

sql - Oracle/SQL - 查找记录(如果不存在类似记录)并加入第二个表

php - 使用 mySQL 查询仅获取第一行

regex - 根据列值连接两个文件。原始文件有重复值