2017-07-05 130 views
1

我在我的JPA實體中使用ZonedDateTime。我也使用Postgres數據庫。默認情況下,postgres創建表模式爲bytea列類型。將ZonedDateTime存儲在Postgres數據庫中

兩個問題,我有

  1. 是否確定來存儲這些信息爲bytea格式?
  2. 如果我要做SQL比較,假設我想要的條目大於給定日期,那麼如何在SQL中編寫此比較,這意味着我如何將bytea轉換回日期?
+1

它必須保存爲'TIMESTAMP'。這與PostgreSQL本身無關。您的架構出了問題,或許您的ORM版本不支持Java8日期類型。 –

+0

「*默認情況下,postgres將表架構創建爲bytea列類型*」 - 否則不會。 Postgres本身不會創建任何表。這總是由將SQL發送到Postgres服務器的應用程序完成的。很可能你的模糊層(又名「ORM」)就是這樣做的 –

回答

2

首先,JPA只映射基本和最常見的類型。

Bytea是postgres最終使用的類型,當您聲明不支持的類型的字段時,並且沒有註釋說明如何處理它。 見https://www.postgresql.org/docs/9.0/static/datatype-binary.html。 使用bytea的推理是,當類型無法映射時,它假定您想要對象存儲爲序列化。

這時JPA不支持Java 8種類型,在上JPA標準的詳細信息: https://vladmihalcea.com/whats-new-in-jpa-2-2-java-8-date-and-time-types/

您可以創建休眠自定義數據類型,前一段時間我貼在這一場戲的框架組:
https://groups.google.com/d/msg/play-framework/3AtNiMf_WBM/LBMeztlXBAAJ

再見
漢斯