2010-12-11 84 views
1

我有映射到一個postgre表time without time zoneLocalTime場持久的實體,我填充這個領域我的應用程序是這樣的:jodatime和休眠支持更改時區

int hour = 10 
int minutes = 12 
MyEntity e = new MyEntity() 
e.setTime(new LocalTime(hour, minutes)); 

然後我堅持實體在數據庫上使用休眠,稍後在應用程序中檢索實體並顯示時間字段,它正確顯示10:12,但是當我看到表上的值(使用pg-admin)時,它顯示:04:12它應該是10:12,在我的jvm和我的系統中的時區是CST(UTC-6),在我看來,冬眠或喬達泰時間的某個地方是我的時間字段開始轉換爲我的時區,當插入到數據庫和檢索值時,我即時更正?是有防止使用JRE 1.6.0_22此behaivor ?, IM的任何方式,冬眠3,約達時間1.5.1和喬達 - 時間 - 冬眠1.2

編輯: 忘記提到該字段被映射在休眠:

type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime" 

回答

2

嗯,這可能是過時的,但呼籲PersistentLocalTime一類的文檔這樣說:

通過休眠堅持本地時間爲SQL TIME數據類型 - 注意,子第二個值不會被重複tained。該類型與org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime基本兼容。 但是請注意,由於使用Time.setTime(long),org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime包含一個錯誤,因爲寫入的時間將從GMT偏移。這個類不受這個問題的影響,但這意味着你不能依賴這種類型的解釋對於這兩個類都是一樣的。

(重點煤礦。)

聽起來你運行到這個問題,而是說使用PersistentLocalTime而是會解決它。

+0

yay,jon向救援團隊求助=),只需要提一下在Hibernate項目的usertype中使用org.jadira.usertype.dateandtime.joda即可。作爲映射文件中的類型,PersistentLocalTime可以有效地解決此問題。 – Harima555 2010-12-11 22:05:55