Spring Data JPA 方法或查询以使用 Postgres 列执行算术运算

Posted

技术标签:

【中文标题】Spring Data JPA 方法或查询以使用 Postgres 列执行算术运算【英文标题】:SpringData JPA Methods or query to perform arithmetic operations with Postgres columns 【发布时间】:2020-06-25 11:20:34 【问题描述】:

我是 SpringBoot 的初学者,并且可以访问带有多个列的 postgres 表以及带有时区列的两个时间戳(开始时间和结束时间)。除了检索所有列之外,我还想显示以秒为单位的时间(结束时间 - 开始时间)。我正在扩展 PagingAndSortingRepository (findAll) 以进行分页和排序检索。请提出所需的解决方案。将使用 ReactJS 进行演示。

【问题讨论】:

一般来说,提问时,请出示您已经尝试过但未能成功的代码。 【参考方案1】:

我认为表示层并不重要。

实现此功能的一种方法是使用自定义查询,例如:

public interface CustomRepository extends JpaRepository<MyEntity, Long> 

  @Query(value = "SELECT id, column1, column2, (
           SELECT EXTRACT(EPOCH from timezone1) - EXTRACT(EPOCH FROM timezone2)
           FROM table where id = t.id) as difference
         FROM table t", nativeQuery = true)
  List<MyEntityProjection> findAllWithTimestamp();


MyEntityProjection 是投影接口,包含所有字段的 getter 以及用于第二个差异的 getter。如果想了解更多关于投影的知识,可以试试here

附:以上查询仅适用于 PostgreSQL。

【讨论】:

谢谢你Turbut。会回复你的 您好 Turbut,无法解决问题。尝试过各种子查询、横向连接,但输出不显示 time_taken 列或出现错误。 请给出你的准确SQL,以便我给你一个准确的答案。

以上是关于Spring Data JPA 方法或查询以使用 Postgres 列执行算术运算的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring DATA JPA 创建自定义查询?

Spring Data JPA方法定义规范

spring data jpa总结

如何在本机查询中使用 NVL 或 COALESCE 获取 Spring Data JPA 中的值列表

Spring Data JPA 参考文档二

《Spring Data JPA从入门到精通》内容简介前言