【发布时间】:2015-12-11 17:46:57
【问题描述】:
我有一个包含 timestamp without time zone 字段的 PostgreSQL 表。这在我的 Java 代码中配置如下:
@Column(name = "timestamp")
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date timestamp;
时间戳属性设置为new Date(),即包含日期和时间。但是在数据库中,日期部分没有被持久化,例如“14:40:28.889”;因此,当从数据库中检索到日期时,不会加载日期并将其设置为默认值,即 01/01/1970。时间戳的日期部分正在运行的任何想法?
更新: 我增加了休眠的日志记录级别,因此我可以通过在 application.properties 文件中添加以下内容来查看正在保存的内容:
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE
日志输出如下:
binding parameter [6] as [TIMESTAMP] - [Wed Sep 16 08:57:03 CEST 2015]
更新 2:
我单步执行了代码,发现插入 sql 的日期格式为2015-09-16 11:16:09.416000 +02:00:00。我在 PGAdmin 中自动插入字符串,它插入没有错误。保存后点击小刷新按钮,日期部分消失了!所以数据被正确保存,但不知何故 postgre 之后做了一些奇怪的事情。
【问题讨论】:
-
看一下用来持久化的SQL?
-
由于它使用 JPA,我只调用了 save() 方法,日志只显示
insert into batch_steps (item_id, result, step, step_id, success, timestamp) values (?, ?, ?, ?, ?, ?) -
大多数(所有)JPA 提供者都可以选择查看传入的参数。您不会说您使用哪一个。 JPA 没有“保存”方法
-
我使用
org.springframework.data.jpa.repository.JpaRepository提供的保存方式 -
所以您使用的是“Spring Data JPA”而不是 JPA API。尽管如此,所有 JPA 提供程序(DataNucleus、EclipseLink、Hibernate 等)都提供了一种查看这些参数的值的方法,因此请查阅您正在使用的任何文档。
标签: java postgresql jpa spring-data-jpa