2017-07-13 149 views
0

我正在处理一个Spring Data JPA项目,在那里我想将Oracle SYSDATE存储在一个表的日期字段中。我根本无法修改表格。如何使用JpaRepository保存方法将日期存储为Oracle SYSDATE?

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

我不写任何查询来插入数据,而是我使用JpaRepositorysave()方法。

我该怎么做?

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

+0

[ERROR:列“publish \ _date”的类型为date,但表达式的类型为bytea]的可能重复(https://stackoverflow.com/questions/45046855/error-column-publish-date-is-of -type-date-but-expression-is-of-type-bytea) –

+0

@AbhijitSarkar我找不到这样问的答案,因为我没有太多时间来完成这个任务。任何帮助将不胜感激 –

+0

你能读吗? –

回答

0

没有直接的方法来做到这一点(见Setting default values for columns in JPA)。

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

的方法来获得SYSDATE可以在Spring数据仓库

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

您可以设置在@PrePersist监听器的值(见onSave() (for any Entity saved with Hibernate/Spring Data Repositories))。

但我认为你不能在这些监听器中执行查询,所以接下来的事情就是创建一个Spring Data的save方法的自定义实现,以便它获得这样一个值,并保持它可用于Listener,之前实际上保存了任或者,可以使用查询的单独连接。

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

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