如何使用JpaRepository存储方法将日期存储为Oracle SYSDATE?

时间:2017-07-13 06:10:49

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

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

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

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

我该怎么做?

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

1 个答案:

答案 0 :(得分:0)

没有直接的方法(见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方法的自定义实现,以便它获得这样的值在实际保存任何内容之前,让它可供监听器使用。或者,可以使用查询的单独连接。

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

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