Spring / Hibernate-将当前时间戳记写入db

时间:2018-08-28 16:00:06

标签: java spring hibernate

我目前正在从事我的第一个Java项目,并跳入了使用spring / hibernate的工作。

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

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

然后我使用(或尝试)下面的代码来使系统设置时间戳记,因为我正在执行类似的操作以确保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);
    }   

但是,当将项目写入db时,时间戳记将写为0。如果我删除

tempDownload.setTimestamp(System.currentTimeMillis());

然后我可以通过将JSON与有效负载手动传递来设置时间。还有另一种方法可以解决这个问题,否则我可能会缺少一个步骤?

亲切的问候,

丹尼

1 个答案:

答案 0 :(得分:1)

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

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

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

@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;

然后您只需执行tempDownload.setTimestamp(new Date);进行设置。

或者,您可以轻松地将Java 8的新的Date and Time API映射到数据库,即使不使用@Temporal批注,因为它们会自动映射到它们各自的SQL类型。

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

  • LocalDate DATE
  • LocalTime OffsetTime 设置为 TIME
  • 即时 LocalDateTime OffsetDateTime ZonedDateTime TIMESTAMP
  • >

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