2017-07-13 46 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,之前實際上保存了任或者,可以使用查詢的單獨連接。

很明顯,這一切都增加了另一個數據庫往返,這是相當昂貴的。

另一種方法是獲取一次服務器的當前時間,並使用它來確定使用的正確偏移量,並使用該偏移量在本地創建時間戳。當應用程序服務器和數據庫服務器具有不同的夏令時規則時,這會更快更簡單,但會中斷。

相關問題