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
,我想您用于写入时间戳的字段类型为long
或Long
。
如果您想使用 Hibernate 将日期保存到字段中,我建议您使用推荐的方法。
例如,如果您的情况是,您可以将timestamp
字段的类型设为Date
,并使用以下方案对其进行注释。
@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;
那么你可以简单地使用tempDownload.setTimestamp(new Date);
来设置它。
或者,您可以使用 Java 8 的新日期和时间 API,即使不使用 @Temporal
注释,也可以轻松映射到数据库,因为它们会自动映射到各自的 SQL 类型。
考虑到这一点,映射方案是:
LocalDate 到 DATE LocalTime 和 OffsetTime 到 TIME Instant、LocalDateTime、OffsetDateTime 和 ZonedDateTime 到 TIMESTAMP为日期持久性使用正确的类型非常重要。您的示例仅保存毫秒,因为它们作为纪元返回。这意味着您需要执行从毫秒到日期的转换才能完成各种工作。此外,如果您想获得与时区相关的信息,那么遵循这种方法是禁止的。
【讨论】:
嗨,阿里斯,感谢您的回复。只是为了确认我使用的是长类型是的。 :) 我今天早上在上面使用了您的解决方案,效果很好,谢谢! 很高兴总是很乐意提供帮助。也请继续投票并将其作为建议的答案。以上是关于Spring/Hibernate - 将当前时间戳写入数据库 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
spring / hibernate - 按当前用户 ID 过滤