微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以在 Spring Data JDBC 中返回结合多个聚合的自定义 Java 对象?

如何解决是否可以在 Spring Data JDBC 中返回结合多个聚合的自定义 Java 对象?

我有多个聚合类,例如 Request、Scribe、Candidate 和 Exam。

示例架构:

请求(id、scribe_id、Candidate_id、exam_id、status)

抄写员(id,姓名)

候选人(id,姓名)

考试(id、姓名、日程)

如您所见,Request 表包含对 Scribe、Candidate 和 Exam 表的引用。 对于其中一项要求,我需要根据条件返回所有请求,包括抄写员、考生和考试的所有相应详细信息。

为此,我的存储库类中的查询将类似于以下内容

SELECT r.id,r.status,c.name,s.name,e.schedule,e.name
            FROM request r 
            JOIN candidate c ON r.candidate=c.id
            JOIN scribe s ON r.scribe=s.id
            JOIN exam e ON r.exam=e.id
            WHERE <some-condition>

现在,有没有办法将这个查询的结果直接映射到自定义 Java 对象并在 Spring Data JDBC 中返回相同的内容? 我相信另一种选择是使用 Spring JDBC 模板。 好奇,Spring Data JDBC 有什么开箱即用的支持吗?

谢谢。

解决方法

我可以通过设置 rowMapperClass 注释的 org.springframework.data.jdbc.repository.query.Query 值来返回自定义 Java 对象。为此需要为自定义 Java 对象定义 RowMapper。

更改看起来类似于以下内容:

public class RequestResourceRowMapper implements RowMapper<RequestResource> {
    @Override
    public RequestResource mapRow(ResultSet resultSet,int rowNumber) throws SQLException { ... }
}

在存储库类中,需要设置 rowMapper 值。

 @Query(value = """
              SELECT r.id,r.status,c.name,s.name,e.schedule,e.name
            FROM request r 
            JOIN candidate c ON r.candidate=c.id
            JOIN scribe s ON r.scribe=s.id
            JOIN exam e ON r.exam=e.id
            WHERE <some-condition>
            """,rowMapperClass = RequestResourceRowMapper.class)
    List<RequestResource> searchRequestResources(...);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。