【问题标题】:Spring Jpa LessThanEqual for postgres timestamp fieldSpring Jpa LessThanEqual 用于 postgres 时间戳字段
【发布时间】:2020-01-20 15:23:29
【问题描述】:

我的实体类中有字段 Effective_startdate。

@Basic
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "effective_startdate", columnDefinition = "TIMESTAMP WITHOUT TIME ZONE")
private Date effectiveStartdate;

我想在我的 Jpa 存储库类中使用它来过滤到我的 getmapping 方法中以供进一步使用:

List<PoJoObject> findByEffectiveStartdateLessThanEqual(Date date);

对于这整个操作,我的后端数据库是 postgres,并且同一字段的类型为 TIMESTAMP。

谁能帮助我从我的 getmapping 调用中获得预期的格式(“yyyy-MM-dd HH:mm:ss”)响应。

我对此完全陌生,不知道 Spring 如何在内部处理 Date 和序列化/反序列化以及与 postgres db 进行比较。

注意:

  • 在 java 代码中使用 java.util.Date。
  • postgres effective_startdate 输出如下所示:

2019-09-19 18:28:23.012

  • 同一字段的响应格式为:

“有效开始日期”:“2019-07-30T04:37:55.000+0000”

【问题讨论】:

  • 我回滚了您对问题的更改,因为它会将问题变成完全不同的问题。不要更改问题,请接受解决原始问题的答案并创建一个新问题。

标签: java spring postgresql spring-boot spring-data-jpa


【解决方案1】:

你必须将JsonFormat注解添加到有效开始日期:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSS")
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "effective_startdate", columnDefinition = "TIMESTAMP WITHOUT TIME ZONE")
private Date effectiveStartdate;

顺便说一句。 @Basic 注释不是必需的,列名也是多余的,因为这是 Hibernate 将 _ 转换为 camelCase 的方式。

【讨论】:

  • 我使用了下划线,因为在 postgres 端我使用驼峰式模式,它会自动展平为所有小写。
  • 感谢您的评论,从回复中我应用了您建议的模式,它工作得非常好。但是我的查询结果与 HH:mm:ss.SSS 不匹配,传递值只是 yyyy-MM-dd 满足给定条件。为了更清楚,我也更新了问题。
猜你喜欢
  • 2020-04-07
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 2021-12-31
  • 2011-09-05
  • 2018-11-18
  • 2017-10-05
相关资源
最近更新 更多