我正在處理一個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我找不到這樣問的答案,因爲我沒有太多時間來完成這個任務。任何幫助將不勝感激 –
你能讀嗎? –