Spring/Hibernate - 将当前时间戳写入数据库 [重复]

Posted

技术标签:

【中文标题】Spring/Hibernate - 将当前时间戳写入数据库 [重复]【英文标题】:Spring/Hibernate - write current timestamp to db [duplicate] 【发布时间】:2019-02-03 07:57:49 【问题描述】:

我目前正在开发我的第一个 java 项目,并开始使用 spring/hibernate。

我创建了一个 API,用于在数据库上执行 CRUD 操作。我认为写下将项目添加到数据库的当前时间是个好主意。

为此,我在数据库中创建了一个新列并更新了我用来写入它的实体,使用一个名为“timestamp”的新 java 字段并将其映射到数据库列。

然后我使用(或尝试)下面的代码让系统在项目写入​​数据库时​​设置时间戳,因为我正在做类似的事情以确保 id 在自动递增之前设置为 0。

 for (Downloads tempDownload : theDownloads) 

            // display the download 
             tempDownload.setId(0);
             tempDownload.setTimestamp(System.currentTimeMillis());
             System.out.println(tempDownload);

            // save to the database
              downloadsService.saveProduct(tempDownload);
       

但是,当项目被写入数据库时​​,时间戳被写为 0。如果我删除了

tempDownload.setTimestamp(System.currentTimeMillis());

然后我可以通过 json 手动将其与有效负载一起传递来设置时间。有没有其他方法可以解决这个问题,或者我可能会错过一个步骤?

亲切的问候,

丹尼

【问题讨论】:

新字段的数据库字段类型是什么?你用的是什么数据库? 【参考方案1】:

由于您使用的是System#currentTimeMillis,我想您用于写入时间戳的字段类型为longLong

如果您想使用 Hibernate 将日期保存到字段中,我建议您使用推荐的方法。

例如,如果您的情况是,您可以将timestamp 字段的类型设为Date,并使用以下方案对其进行注释。

@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;

那么你可以简单地使用tempDownload.setTimestamp(new Date); 来设置它。

或者,您可以使用 Java 8 的新日期和时间 API,即使不使用 @Temporal 注释,也可以轻松映射到数据库,因为它们会自动映射到各自的 SQL 类型。

考虑到这一点,映射方案是:

LocalDateDATE LocalTimeOffsetTimeTIME InstantLocalDateTimeOffsetDateTimeZonedDateTimeTIMESTAMP

为日期持久性使用正确的类型非常重要。您的示例仅保存毫秒,因为它们作为纪元返回。这意味着您需要执行从毫秒到日期的转换才能完成各种工作。此外,如果您想获得与时区相关的信息,那么遵循这种方法是禁止的。

【讨论】:

嗨,阿里斯,感谢您的回复。只是为了确认我使用的是长类型是的。 :) 我今天早上在上面使用了您的解决方案,效果很好,谢谢! 很高兴总是很乐意提供帮助。也请继续投票并将其作为建议的答案。

以上是关于Spring/Hibernate - 将当前时间戳写入数据库 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

spring / hibernate - 按当前用户 ID 过滤

Spring Hibernate - 无法为当前线程获取事务同步会话

php怎么将当前时间戳增加一year

php怎么将当前时间戳增加一year

如何利用PHP时间戳获取当前时间

如何将 MySql 时间戳列更新为 PHP 上的当前时间戳?