【问题标题】:How to store date as Oracle SYSDATE with JpaRepository save method?如何使用 JpaRepository 保存方法将日期存储为 Oracle SYSDATE?
【发布时间】:2017-12-17 18:22:13
【问题描述】:

我正在开发一个 Spring Data JPA 项目,我想将 Oracle SYSDATE 存储在表的日期字段中。我根本无法修改表格。

现在,我正在做的是将new Date() 传递给该日期字段。这是不正确的,因为 Oracle 服务器位于不同的时区。

我没有编写任何查询来插入数据,而是使用JpaRepository save() 方法。

我该怎么做?

P.S.我不想在我的代码中硬编码数据库服务器的时区。

【问题讨论】:

标签: java spring oracle spring-data spring-data-jpa


【解决方案1】:

没有直接的方法可以做到这一点(请参阅Setting default values for columns in JPA)。

您可以做的是执行select SYSDATE from dual 并使用结果来设置您的属性。

获取 sysdate 的方法可以在 Spring Data Repository 中

@Query(value=`select SYSDATE from dual`, nativeQuery=true)
Date currentDate();

您可以在 @PrePersist 侦听器中设置值(请参阅 onSave() (for any Entity saved with Hibernate/Spring Data Repositories) )。

但我认为您无法在这些侦听器中执行查询,因此接下来将创建 Spring Data 的 save 方法的自定义实现,以便它获得这样的值并使其可用于侦听器,在实际保存任何东西之前。或者,可以使用单独的查询连接。

显然,这都增加了另一个数据库往返,这是相当昂贵的。

另一种方法是获取一次服务器的当前时间并使用它来确定要使用的正确偏移量,并使用该偏移量在本地创建时间戳。这更快更容易,但当应用程序服务器和数据库服务器具有不同的夏令时规则时会中断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2012-06-18
    相关资源
    最近更新 更多