我正在处理一个Spring Data JPA项目,在那里我想将Oracle SYSDATE
存储在一个表的日期字段中。我根本无法修改表格。如何使用JpaRepository保存方法将日期存储为Oracle SYSDATE?
现在,我正在做的是将new Date()
传递到该日期字段。这是不正确的,因为Oracle服务器处于不同的时区。
我不写任何查询来插入数据,而是我使用JpaRepository
save()
方法。
我该怎么做?
P.S.我不想在我的代码中硬编码数据库服务器的时区。
我正在处理一个Spring Data JPA项目,在那里我想将Oracle SYSDATE
存储在一个表的日期字段中。我根本无法修改表格。如何使用JpaRepository保存方法将日期存储为Oracle SYSDATE?
现在,我正在做的是将new Date()
传递到该日期字段。这是不正确的,因为Oracle服务器处于不同的时区。
我不写任何查询来插入数据,而是我使用JpaRepository
save()
方法。
我该怎么做?
P.S.我不想在我的代码中硬编码数据库服务器的时区。
没有直接的方法来做到这一点(见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,之前实际上保存了任或者,可以使用查询的单独连接。
很明显,这一切都增加了另一个数据库往返,这是相当昂贵的。
另一种方法是获取一次服务器的当前时间,并使用它来确定使用的正确偏移量,并使用该偏移量在本地创建时间戳。当应用程序服务器和数据库服务器具有不同的夏令时规则时,这会更快更简单,但会中断。
[ERROR:列“publish \ _date”的类型为date,但表达式的类型为bytea]的可能重复(https://stackoverflow.com/questions/45046855/error-column-publish-date-is-of -type-date-but-expression-is-of-type-bytea) –
@AbhijitSarkar我找不到这样问的答案,因为我没有太多时间来完成这个任务。任何帮助将不胜感激 –
你能读吗? –